[c++] klassenoververing

Pagina: 1
Acties:

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
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:

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


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Zo te zien heb je spm niet gecompiled, dus om daar tegen aan te linken, lijkt me moeilijk ;)
Kijk even in je man g++

[edit] Ik zie je ook nergens spm.hpp includen in spmnew, maar misschien heb je dat weggeknipt :)

[ Voor 30% gewijzigd door Glimi op 24-04-2003 20:24 ]


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Glimi schreef op 24 April 2003 @ 20:21:


[edit] Ik zie je ook nergens spm.hpp includen in spmnew, maar misschien heb je dat weggeknipt :)
Toegevoegd, was inderdaad weggeknipt.

Het apart compileren van spm.cpp gaat ook niet, dan krijg ik een foutmelding van een variabele die dubbel gedefinieerd is. En hij staat echt maar in een bestand, maar dat komt dan weer door de #include's denk.

[ Voor 31% gewijzigd door FendtVario op 24-04-2003 21:13 ]

www.fendt.com | Nikon D7100 | PS5


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je compilet je sourcefiles apart, dat doe je fout

gebruik je -c switch om te compileren naar object files (en dus niet te linken)
Of geef alle .cpp files als argument mee met g++

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

Topicstarter
Het werkt inmiddels. Ik compileer ze nu beide apart, maar hiervoor moest ik de bestanden een beetje aanpassen. Het heeft even geduurt maar nu kan ik weer vooruit.

www.fendt.com | Nikon D7100 | PS5