ha az osztályokat amiket használok külön cpp fájban implementálom, akkor a g++ -nak hogyan tudom megmondani, hogy a 2.cpp -ben lévő öröklődés az 1.cpp fájlban található osztályra hivatkozik?
pl:
1.cpp
class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b;}
};
2.cpp
#include <iostream>
using namespace std;
class CRectangle: public CPolygon {
public:
int area ()
{ return (width * height); }
};
class CTriangle: public CPolygon {
public:
int area ()
{ return (width * height / 2); }
};
int main () {
CRectangle rect;
CTriangle trgl;
rect.set_values (4,5);
trgl.set_values (4,5);
cout << rect.area() << endl;
cout << trgl.area() << endl;
return 0;
}
szóval hogyan tudnám ezt lefordítani, mivel a g++ -o teszt 1.cpp 2.cpp fordítási hibát ad:
2.cpp:4: error: expected class-name before '{' token
2.cpp: In member function 'int CRectangle::area()':
2.cpp:7: error: 'width' was not declared in this scope
2.cpp:7: error: 'height' was not declared in this scope
2.cpp: At global scope:
2.cpp:10: error: expected class-name before '{' token
2.cpp: In member function 'int CTriangle::area()':
2.cpp:13: error: 'width' was not declared in this scope
2.cpp:13: error: 'height' was not declared in this scope
2.cpp: In function 'int main()':
2.cpp:19: error: 'class CRectangle' has no member named 'set_values'
2.cpp:20: error: 'class CTriangle' has no member named 'set_values'
Ha egy fájlban van minden akkor simán lefordul.
- 1136 megtekintés
Hozzászólások
osztálydefiníciókat tegyed ki header file-ba + include..
- A hozzászóláshoz be kell jelentkezni
ahaaaa.. tényleg láma kérdés volt hiszen sima c-ben is ki kell tenni a függvény definíciókat. köszi
- A hozzászóláshoz be kell jelentkezni
De miért is kellene??? A forrásfájlokra való szétdarabolás csak arra jó, hogy átláthatóbb legyen a kód.
A baj mindössze annyi, hogy a 2.cpp-ben:
"class CRectangle: public CPolygon {"
Na itt micsoda a CPolygon? Ezt a fordító még sohasem látta, így nem is fogja tudni lefordítani.
Vagy tedd ugyanebbe a fájlba a CPolygon-t, vagy ha külön van, akkor legalább a deklarációját includold be.
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
A szetdarabolas nem csak az atlathatosag miatt erdekes, van ugyebar olyasmi, mint implicit/explicit inlineing, stb.
---
while (!sleep) sheep++;
- A hozzászóláshoz be kell jelentkezni
Mindenemu nagy arcoskodas nelkul a kovetkezo ket fogalmad probald magabdan tisztazni :
-compiler
-linker
Ha letitsztaztad oket. Akkor mar erted is... :)
g
- A hozzászóláshoz be kell jelentkezni