hab mal wieder n kleines Problem. Diesmal mit C++..
Und zwar müssen wir im OOP Kurs eine kleine "Medienverwaltung" schreiben. Bin eigentlich ganz zufrieden, bis auf die Tatsache dass ich, seitdem ich den Code in drei verschiedenen Dateien (header.h für Klassendefinitionen, main.cpp: Hauptprogramm, classfunc.cpp: Klassen)
immer Fehler beim Compilieren bekomme
Hier die Fehlermeldung(en):
Quellcode
- nic@nic-laptop:~/Dokumente/Studium/2.Semester/OOP/übung2$ g++ -o ausgabe main.cpp classfunc.cpp
- /tmp/ccx7maTO.o: In function `Buch::Buch()':
- classfunc.cpp:(.text+0x476): undefined reference to `Medium::Medium(int)'
- /tmp/ccx7maTO.o: In function `Buch::Buch()':
- classfunc.cpp:(.text+0x58c): undefined reference to `Medium::Medium(int)'
- /tmp/ccx7maTO.o: In function `Video::Video()':
- classfunc.cpp:(.text+0x6a2): undefined reference to `Medium::Medium(int)'
- /tmp/ccx7maTO.o: In function `Video::Video()':
- classfunc.cpp:(.text+0x7b8): undefined reference to `Medium::Medium(int)'
- collect2: ld gab 1 als Ende-Status zurück
- nic@nic-laptop:~/Dokumente/Studium/2.Semester/OOP/übung2$
Hier der/die Code(s):
PHP-Quellcode
- //Headerdatei (header.h)
- #ifndef HEADER_H
- #define HEADER_H
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <cstdio>
- using namespace std;
- class Medium {
- public:
- Medium();
- Medium(int);
- int getsignatur();
- void print();
- void entleihen();
- void rueckgabe();
- protected:
- int signatur;
- string titel;
- string typ;
- bool status;
- };
- class Buch : public Medium {
- public:
- Buch();
- void print();
- void entleihen();
- void rueckgabe();
- private:
- int seiten;
- };
- class Video : public Medium {
- public:
- Video();
- void print();
- void entleihen();
- void rueckgabe();
- private:
- float spieldauer;
- };
- #endif
- //main.cpp
- #include "header.h"
- const int S = 20;
- int main(){
- const int N = 10;
- char eingabe;
- Medium* neuM[N];
- int m = 0, v = 0, b = 0;
- Video* neuV[N] = {NULL};
- Buch* neuB[N] = {NULL};
- int sig_check;
- while(1){
- cout <<endl<<endl;
- cout << "m--> Anlegen und Initialisieren" <<endl;
- cout << "b--> Hinzufügen und Initialisieren eines neuen Buches" <<endl;
- cout << "v--> Hinzufügen und Initialisieren eines neuen Videos" <<endl;
- cout << "l--> Anzeige der Medieneigenschaft" <<endl;
- cout << "e--> Ausleihen" <<endl;
- cout << "r--> Rückgabe" <<endl;
- cout << "q--> Programmende" <<endl <<endl;
- cout << "Bitte wählen Sie einen Modus aus: ";
- cin >> eingabe;
- cout << "Ihre Auswahl: " << eingabe <<endl;
- switch(eingabe){
- case 'm': //if(neu == NULL)
- //delete neu;
- if (m >= N)
- cout << "Array voll!";
- else{
- neuM[m] = new Medium;
- m++;
- }
- break;
- case 'b': if (b >= N)
- cout << "Array voll!";
- else{
- neuB[b] = new Buch;
- b++;
- }
- break;
- case 'v': if (v >= N)
- cout << "Array voll!";
- else{
- neuV[v] = new Video;
- v++;
- }
- break;
- case 'l': cout << right << setw(S) << setw(S) << "Medieneigenschaften" << endl;
- cout << left << setw(S) << "Signatur" << left << setw(S) << "Typ" << left << setw(S) << "Titel" << left << setw(S) << "Status" << right << setw(S) << "weitere Daten" << endl;
- for (int i = 0; i < m; i++){
- neuM[i]->print();
- cout << endl;
- }
- for (int i = 0; i < b; i++){
- neuB[i]->print();
- cout << endl;
- }
- for (int i = 0; i < v; i++){
- neuV[i]->print();
- cout << endl;
- }
- break;
- case 'e': cout << "Bitte Signatur zur Überprüfung eingeben: ";
- cin >> sig_check;
- for(int i = 0; i <= m; i++){
- if (neuM[i]->getsignatur() == sig_check)
- neuM[i]->entleihen();
- }
- for(int i = 0; i <= b; i++){
- if (neuB[i]->getsignatur() == sig_check)
- neuB[i]->entleihen();
- }
- for(int i = 0; i <= v; i++){
- if (neuV[i]->getsignatur() == sig_check)
- neuV[i]->entleihen();
- }
- break;
- case 'r': cout << "Bitte Signatur zur Überprüfung eingeben: ";
- cin >> sig_check;
- for(int i = 0; i <= m; i++){
- if (neuM[i]->getsignatur() == sig_check)
- neuM[i]->rueckgabe();
- }
- for(int i = 0; i <= b; i++){
- if (neuB[i]->getsignatur() == sig_check)
- neuB[i]->rueckgabe();
- }
- for(int i = 0; i <= v; i++){
- if (neuV[i]->getsignatur() == sig_check)
- neuV[i]->rueckgabe();
- }
- break;
- case 'q': return 0;
- break;
- }
- }
- return 0;
- }
- //classfunc.cpp
- #include "header.h"
- const int S = 20;
- Medium::Medium(){
- status = false;
- cout << "Bitte Mediendaten angeben: Signatur und Titel" <<endl
- << "Signatur: ";
- cin >> signatur;
- cin.ignore(10,'\n');
- cout << "Titel: ";
- getline(cin, titel);
- typ.assign("Medium");
- }
- void Medium::print(){
- cout << left << setw(S) << signatur << left << setw(S) << typ << left << setw(S) << titel << left <<setw(S) << status;
- }
- int Medium::getsignatur(){
- return signatur;
- }
- void Medium::entleihen(){
- if(status == true){
- status = false;
- cout << "Medium bereits ausgeliehen!";
- }
- }
- void Medium::rueckgabe(){
- if(status == false){
- status = true;
- cout << "Medium bereits zurück!";
- }
- }
- Video::Video():Medium(0) {
- status = false;
- cout << "Bitte Videodaten angeben: Signatur, Titel und Spieldauer" <<endl
- << "Signatur: ";
- cin >> signatur;
- cin.ignore(10,'\n');
- cout << "Titel: ";
- getline(cin, titel);
- cout << "Spieldauer: ";
- cin >> spieldauer;
- typ.assign("Video");
- }
- void Video::print(){
- Medium::print();
- cout << right << setw(S) << spieldauer << " min";
- }
- void Video::entleihen(){
- Medium::entleihen();
- }
- void Video::rueckgabe(){
- Medium::rueckgabe();
- }
- Buch::Buch():Medium(0) {
- status = false;
- cout << "Bitte Buchdaten angeben: Signatur, Titel und Seiten" <<endl
- << "Signatur: ";
- cin >> signatur;
- cin.ignore(10,'\n');
- cout << "Titel: ";
- getline(cin, titel);
- cout << "Seiten: ";
- cin >> seiten;
- typ.assign("Buch");
- }
- void Buch::print(){
- Medium::print();
- cout << right << setw(S) << seiten << " Seiten";
- }
- void Buch::entleihen(){
- Medium::entleihen();
- }
- void Buch::rueckgabe(){
- Medium::rueckgabe();
- }
Kann mir vielleicht jemand weiter helfen? Komm nicht drauf was der Compiler von mir will bzw. warum er meckert. Compiler is C++
MfG kunks
[size="2"]Gegen die Vorratsdatenspeicherung - Mach mit![/size]