2011-01-03 11 views
1

Ich versuche, einige funktionierende Visual C++ - Code in Qt Creator zu importieren, und ich habe einige Kompilierungsfehler, die ich nicht erklären kann. Dies ist mein Code:"Undefinierte Referenz" -Fehler in Qt Creator

// TabSprite.h 

#include <GraphicsItem.h> 

namespace appetizer { 

class TabSprite : public GraphicsItem { 

public: 

    TabSprite(GraphicsWindow* parentWindow); 

} 

// TabSprite.cpp 

#include <TabSprite.h> 
using namespace appetizer; 

TabSprite::TabSprite(GraphicsWindow* parentWindow): GraphicsItem(parentWindow) { 

} 

Und Qt Creator geben Sie mir diesen Fehler (bei der Konstruktor-Deklaration in TabSprite.cpp):

Undefined Verweis auf die ‚Vorspeise :: GraphicsItem :: GraphicsItem (Vorspeise :: GraphicsWindow *)

jedoch GraphicsItem ist ordnungsgemäß in GraphicsItem.h deklariert, so verstehe ich nicht, warum die Compiler es nicht finden. Kann jemand sehen, was mit diesem Code falsch sein könnte?

+1

BTW: afaik gibt es einen Unterschied zwischen definieren und deklarieren: In TabSprite.h deklarieren Sie den ctor von TabSprite und in TabSprite.cpp definieren Sie es. –

+0

Ich habe meinen Code geklärt - ich hätte eigentlich "deklariert" und nicht "definiert" schreiben sollen. Ich kann den Code immer noch nicht kompilieren. –

+1

Und ich denke, es ist gute Praxis, 'Namespace Vorspeise {/ * Definition von TabSprite * /}' anstelle von 'using Namespace' zu ​​verwenden, was manchmal kritisch ist. Und: Es ist keine Kompilation, sondern ein Linker-Fehler –

Antwort

1

Das bedeutet, dass Sie den Konstruktor GraphicsItem nicht definiert haben.

+1

Entschuldigung, ich habe den ganzen Code nicht eingeschlossen: GraphicsItem ist in GraphicsItem.h definiert, das selbst in TabSprite.h enthalten ist. Ich habe den Code aktualisiert, um das zu zeigen. –

+1

Oh ja, du hattest eigentlich recht. Die GraphicsItem.h-Datei war dort, aber nicht in der .pro-Datei enthalten, so dass sie nicht kompiliert wurde. Problem gelöst :) –

0

Der Konstruktor ist wahrscheinlich in TabSprite.h deklariert (obwohl Ihr Code das nicht zeigt). Deshalb kompiliert es. Aber der Konstruktor ist nicht definiert irgendwo, oder, weniger wahrscheinlich, die Einheit, wo es definiert ist, ist nicht in den Linking-Prozess enthalten. Deshalb verlinkt es nicht.