| 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 | class Point{ unsigned short X,Y; public: Point(unsigned short x,unsigned short y):X(x),Y(y) {} unsigned short get_X(){return X;} unsigned short get_Y(){return Y;} }; class Shape{ public: virtual void Rotate(int)=0; virtual void Draw()=0; virtual bool is_Closed()=0; }; class Circle:public Shape{ Point _CENTER; unsigned _RADIUS; void Rotate(int); public: Circle(Point p,unsigned r):_CENTER(p),_RADIUS(r){} void Draw(); bool is_Closed(){return true;} }; } |
| 1 2 3 4 5 6 7 | int main(){ shp::Circle myCircle(shp::Point(40,20),5); //myCircle.Draw(); return 0; } |
| 1 2 | collect2: ld returned 1 exit status |
Dat is toch raar want Circle zou toch gewoon een virtual table moeten hebben aangezien zijn base class puur virtueel is?quote:Op vrijdag 6 augustus 2010 13:56 schreef Cruise.Elroy het volgende:
even een recompile ofzo? hij zegt dat Circle geen virtual table heeft, en blijkbaar ergens niet als derived class is gedefinieerd?
Geen idee verder.
Hmm... daar heb je idd een puntquote:Op vrijdag 6 augustus 2010 14:44 schreef thabit het volgende:
Hij is public in Shape. Dus als je een object van type Shape hebt, en weet niet wat voor Shape het is, moet je wel Rotate erop kunnen aanroepen. Maar goed, dat terzijde.
| 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 | #define SHAPE_H namespace shp{ class Point{ unsigned short X,Y; public: Point(unsigned short x,unsigned short y):X(x),Y(y) {} unsigned short get_X(){return X;} unsigned short get_Y(){return Y;} }; class Shape{ public: virtual void Rotate(int)=0; virtual void Draw()=0; virtual bool is_Closed()=0; }; class Polygon:public Shape{ public: bool is_Closed(){return true;} }; class Circle:public Shape{ Point _CENTER; unsigned _RADIUS; public: Circle(Point p,unsigned r):_CENTER(p),_RADIUS(r){} void Rotate(int); void Draw(); bool is_Closed(){return true;} }; } #endif |
Ja, iknow ik heb geen .cpp file maar die heb ik voor classes toch ook niet nodig??quote:
Hehe, daar kwam ik idd ook net achter...quote:Op vrijdag 6 augustus 2010 15:18 schreef thabit het volgende:
Dan zit daar dus het probleem: de functies Circle::Rotate en Circle::Draw zijn alleen gedeclareerd, maar niet gedefinieerd. Dat vindt de linker niet zo grappig (vandaar ook een 'ld' error: het compilen gaat op zich goed, alleen het linken wil niet).
Maar hij roept Rotate en Draw niet aanquote:Op vrijdag 6 augustus 2010 15:18 schreef thabit het volgende:
Dan zit daar dus het probleem: de functies Circle::Rotate en Circle::Draw zijn alleen gedeclareerd, maar niet gedefinieerd. Dat vindt de linker niet zo grappig (vandaar ook een 'ld' error: het compilen gaat op zich goed, alleen het linken wil niet).
C++ is geen Python.quote:Op vrijdag 6 augustus 2010 15:23 schreef TeringHenkie het volgende:
[..]
Maar hij roept Rotate en Draw niet aan
jepquote:Op vrijdag 6 augustus 2010 15:31 schreef Cruise.Elroy het volgende:
Wel rare error voor een linkerfout. Maar is het nu gefixed?
hoe zo als reference dan? kost dan minder resources?quote:Op vrijdag 6 augustus 2010 15:25 schreef thabit het volgende:
Nog wat algemene opmerkingen: als je een base class aanmaakt, waar je classes van wilt afleiden, is het raadzaam om ook de destructor virtual te maken. En in de constructor van Circle kun je Point beter als reference doorgeven dan als value.
Da's een kwestie van economie: goede hardware is tegenwoordig goedkoper dan een goede programmeur.quote:Op vrijdag 6 augustus 2010 18:39 schreef progje het volgende:
Echt schijtziek word ik er van, totaal geen computer kennis meer...
Wat maakt het nou uit hoe het geheugen werkt, je propt er toch gewoon een extra bankje bij als het te traag wordt
Nou, als de salaris-eis nou ook eens in overeenstemming was met het gewenste niveau..quote:Op vrijdag 6 augustus 2010 18:46 schreef thabit het volgende:
[..]
Da's een kwestie van economie: goede hardware is tegenwoordig goedkoper dan een goede programmeur.
Ik neem aan dat een C++ programmeur wel meer verdient dan iemand die formpjes in elkaar klikt in C#?quote:Op vrijdag 6 augustus 2010 18:49 schreef progje het volgende:
[..]
Nou, als de salaris-eis nou ook eens in overeenstemming was met het gewenste niveau..
Maar dat laat helaas ook nog vaak te wensen over.
En allemaal zo heerlijk groot ego, ze vinden zichzelf allemaal de beste en overleggen ho maar
verder ben ik niet gefrustreerd hoor.
Nu werk ik zelf in een omgeving waar ook veel in .Net en C# wordt geprogrammeerd, misschien hoort het ook wel bij dat wereldje ik weet het niet..
Ja daar was ik al bang voorquote:Op vrijdag 6 augustus 2010 18:10 schreef Cruise.Elroy het volgende:
Euh? Nee want met #include wordt de file direct in je parser geramd. Dus dat later weer undo-en is niet te doen.
#include zet de inhoud van de file direct tussen je code, het is niet zoals in Java e.d.
Je kan dus een losse regel code in een file zetten, en deze dan includen midden in een functie bijvoorbeeld
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |