Ik heb een lastig probleem met het overerven van een klasse in C++. Allereerst wat basisgegevens.
Ik heb een basisklasse spm welke als volgt gedefinieerd is:
De header (deze code) staat in spm.hpp en de implementatie in spm.cpp, vervolgens heb ik nog een klasse gemaakt,
spmnew die overerf van de basisklasse spm, hieronder die code en de implementatie zoals ik die gemaakt heb, de bestanden
heten respectievelijk spm-new.hpp en spm-new.cpp.
Vervolges compileer ik alles en dan krijg ik een foutmelding, deze staat hieronder.
Wat doe ik fout? Ik gebruik het boek C++ Grand Gru, gcc 2.96 onder RH 7.3 en heb voor als nog alleen een
voorbeeldje aangepast. Het enige grote verschil is dat het boek alles in een bestand zet en ik het verdeel over meerdere bestanden.
De bedoeling is om de klasse spm als basis te laten fungeren voor een zevental andere programmatje die elk hun eigen
functionaliteit krijgen maar een aantal zaken gemeen hebben. Het lijkt er op dat de klasse spmnew de weg niet weet naar spm, maar hoe los ik dit op?
Ik heb een basisklasse spm welke als volgt gedefinieerd is:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| #include <cstdio> #include <fstream> #include <getopt.h> class spm { private: option* build_optlong (int c, params* p); void print_help (int c, params* p); protected: int argc; //number of arguments params* p; //param array int p_count; //number of elements in p public: spm (int c, params* p); virtual int execute (void); void help (void); int process_arg(int c, char** argv); }; |
De header (deze code) staat in spm.hpp en de implementatie in spm.cpp, vervolgens heb ik nog een klasse gemaakt,
spmnew die overerf van de basisklasse spm, hieronder die code en de implementatie zoals ik die gemaakt heb, de bestanden
heten respectievelijk spm-new.hpp en spm-new.cpp.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| #include "spm.hpp" class spmnew : public spm { private: protected: public: spmnew (int c, params* p); int execute (void); }; ----spm-new.cpp---- #include "spm-new.hpp" using namespace std; int main (int argc, char** argv) { //create the object spmnew spm_new ((sizeof(spm_new_args) / sizeof(params)), spm_new_args); spm_new.process_arg (argc, argv); return spm_new.execute(); } spmnew::spmnew (int c, params* p) : spm (c, p) { cout << "init" << endl; } int spmnew::execute (void) { if ( (argc == 1) || (p[1].used == 1) ) { help (); return 1; } return 0; } |
Vervolges compileer ik alles en dan krijg ik een foutmelding, deze staat hieronder.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [chris@jcw-laptop src]$ g++ -g -o spm-new spm-new.cpp
/tmp/ccBH54MG.o: In function `spmnew type_info function':
/home/chris/src/spm_/src/spm-new.cpp(.text+0x2c):
undefined reference to `spm::process_arg(int, char **)'
/tmp/ccBH54MG.o: In function `spmnew::spmnew(int, params *)':
/home/chris/src/spm_/src/spm-new.cpp:25:
undefined reference to `spm::spm(int, params *)'
/tmp/ccBH54MG.o: In function `spmnew::execute(void)':
/home/chris/src/spm_/src/spm-new.cpp:33:
undefined reference to `spm::help(void)'
/tmp/ccBH54MG.o: In function `spmnew type_info function':
/home/chris/src/spm_/src/spm-new.cpp(.gnu.linkonce.t.__tf6spmnew+0x10):
undefined reference to `spm type_info function'
/home/chris/src/spm_/src/spm-new.cpp(.gnu.linkonce.t.__tf6spmnew+0x18):
undefined reference to `spm type_info node'
collect2: ld returned 1 exit status |
Wat doe ik fout? Ik gebruik het boek C++ Grand Gru, gcc 2.96 onder RH 7.3 en heb voor als nog alleen een
voorbeeldje aangepast. Het enige grote verschil is dat het boek alles in een bestand zet en ik het verdeel over meerdere bestanden.
De bedoeling is om de klasse spm als basis te laten fungeren voor een zevental andere programmatje die elk hun eigen
functionaliteit krijgen maar een aantal zaken gemeen hebben. Het lijkt er op dat de klasse spmnew de weg niet weet naar spm, maar hoe los ik dit op?
[ Voor 6% gewijzigd door FendtVario op 24-04-2003 20:44 . Reden: probeer de pagina smaller te maken, maar het lukt niet :( ]
www.fendt.com | Nikon D7100 | PS5