láma kérdés c++

Fórumok

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.

Hozzászólások

osztálydefiníciókat tegyed ki header file-ba + include..

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

Mindenemu nagy arcoskodas nelkul a kovetkezo ket fogalmad probald magabdan tisztazni :

-compiler
-linker

Ha letitsztaztad oket. Akkor mar erted is... :)

g