2011-01-03 62 views
1

Qt Creatorに動作中のVisual C++コードをインポートしようとしましたが、説明できないコンパイルエラーが発生しました。これは私のコードです:Qt Creatorで "Undefined reference"エラーが発生しました

// 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) { 

} 

とQt Creatorは(TabSprite.cppでコンストラクタ宣言で)私は、このエラーを与える:「前菜:: GraphicsItemへ

未定義の参照:: GraphicsItem(appetizer :: GraphicsWindow *)

GraphicsItemGraphicsItem.hで正しく宣言されているので、なぜコンパイラがそれを見つけられないのかわかりません。誰でもこのコードで何が間違っているのかを見ることができますか?

+1

BTW:afaik定義と宣言の違いは次のとおりです。TabSprite.hでTabSpriteのctorを宣言し、TabSprite.cppでそれを定義します。 –

+0

私は自分のコードを明確にしました - 私は確かに "宣言された"と "定義されていない"と書くべきです。私はまだコードをコンパイルすることはできません。 –

+1

そして、ときには重大なことがある 'namespace'を使うのではなく、' namespace appetizer {/ * TabSprite * /}の定義 'を使うのがよい方法だと思います。そして:それはコンパイルではなくリンカーエラー –

答えて

1

つまり、GraphicsItemのコンストラクタを定義していないことを意味します。

+1

申し訳ありませんが、コード全体が含まれていませんでした:GraphicsItemはGraphicsItem.hで定義されています。GraphicsItem自体はTabSprite.hに含まれています。私はそれを示すコードを更新しました。 –

+1

ああ、あなたは本当に正しい。 GraphicsItem.hファイルはそこにありましたが、.proファイルには含まれていなかったため、コンパイルされませんでした。問題が解決しました :) –

0

コンストラクタは、おそらくで、TabSprite.hでと宣言されています(ただし、コードには表示されません)。それがコンパイルされる理由です。しかし、コンストラクターはで定義されていません。が定義されているか、定義されているユニットがリンク処理に含まれていない可能性があります。それがリンクしない理由です。