2011-01-03 3 views
1

일부 Visual C++ 코드를 Qt Creator로 가져 오려고하는데 설명 할 수없는 컴파일 오류가 발생했습니다.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) { 

} 

그리고 Qt는 창조주 (TabSprite.cpp에서 생성자 선언에서) 나에게이 오류를 줄 : 이것은 내 코드입니다

정의되지 않은 참조 전채 '에 :: GraphicsItem :: GraphicsItem (전채 :: GraphicsWindow *)

GraphicsItemGraphicsItem.h에 올바르게 선언되어 있으므로 컴파일러가 찾지 못하는 이유를 알지 못합니다. 아무도이 코드를 잘못 이해할 수 있습니까?

+1

BTW : afaik 정의와 선언의 차이점은 다음과 같습니다. TabSprite.h에서 TabSprite의 ctor를 선언하고 TabSprite.cpp에서이를 정의합니다. –

+0

나는 내 코드를 명확히했다. 나는 실제로 "선언"하고 "정의"하지 않았다. 그래도 나는 컴파일 할 코드를 얻을 수 없다. –

+1

그리고 때로는 중요한 네임 스페이스를 사용하는 대신'네임 스페이스 애피타이저 {/ * TabSprite * /} 정의 '를 사용하는 것이 좋습니다. 그리고 : 컴파일이 아니라 링커 오류 –

답변

1

즉, GraphicsItem의 생성자를 정의하지 않았다는 의미입니다.

+1

죄송합니다. 전체 코드를 포함하지 않았습니다 : GraphicsItem 자체가 TabSprite.h에 포함 된 GraphicsItem.h에 정의되어 있습니다. 그것을 보여주기 위해 코드를 업데이트했습니다. –

+1

오, 네가 실제로 옳았다. GraphicsItem.h 파일은 거기 있었지만 .pro 파일에는 포함되어 있지 않으므로 컴파일되지 않았습니다. 문제 해결됨 :) –

0

생성자는 아마도 이며 TabSprite.h에서이라고 선언되어 있습니다 (코드에는 표시되지 않지만). 그것이 컴파일되는 이유입니다. 그러나 생성자가 이 아니며으로 정의되었거나 정의 된 단위가 연결 프로세스에 포함되지 않을 가능성이 적습니다. 그것이 링크하지 않는 이유입니다.

관련 문제