Qt Creator中出现"未定义的引用"错误

3

我正在尝试将一些可用的Visual C++代码导入到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 Creator时,在TabSprite.cpp的构造函数声明处,遇到了以下错误:

未定义对'appetizer::GraphicsItem::GraphicsItem(appetizer::GraphicsWindow*)'的引用

然而,在GraphicsItem.h中,GraphicsItem已经被正确地声明了,所以我不明白为什么编译器找不到它。有人能看出这段代码有什么问题吗?


1
顺便提一下,据我所知,定义和声明是有区别的:在TabSprite.h中,您声明了TabSprite的构造函数,在TabSprite.cpp中,您定义了它。 - Karl von Moor
我澄清了我的代码 - 我确实应该写“声明”而不是“定义”。但我仍然无法使代码编译。 - laurent
1
我认为使用 namespace appetizer { /* definition of TabSprite*/ } 而不是 using namespace 是一个好的实践,因为后者有时会出现问题。另外,这不是编译错误而是链接错误。 - Karl von Moor
@Polybos,如果它是内联的,也可以在TabSprite.h中定义。只要它在某个地方被定义了,就应该没问题。 - Sergei Tachenov
如果您希望显示您的姓名,请在您的SO偏好设置中进行设置。 - ismail
显示剩余2条评论
2个回答

3
这意味着你没有定义GraphicsItem的构造函数。

1
抱歉我没有包含整个代码:GraphicsItem 在 GraphicsItem.h 中定义,而 GraphicsItem.h 又被包含在 TabSprite.h 中。我已经更新了代码以展示这一点。 - laurent
1
哦,你说得对。实际上,GraphicsItem.h文件是存在的,但没有在.pro文件中包含,所以它没有被编译。问题解决了 :) - laurent

0
构造函数可能在TabSprite.h中声明(尽管你的代码没有显示出来)。这就是为什么它可以编译通过。但是构造函数在任何地方都没有定义,或者更不太可能的是,定义它的单元没有包含在链接过程中。这就是为什么它无法链接的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接