Qt Creator:“使用内联函数但从未定义过” - 为什么?

时间:2009-09-14 13:50:10

标签: c++ qt qt-creator

为什么我在Qt Creator中收到此警告:`inline function'bool Lion :: growl()'使用但从未定义?

我仔细检查了我的代码,并声明了

inline bool growl ()Lion

中的

lion.h

以及lion.cpp中的相应实现:

inline bool Lion::growl ()

发生了什么事?

编辑:我的假设是在.cpp文件中定义实际的内联方法是合法的(inline关键字警告编译器在其他地方查找方法体),或者我错了吗? / p>

我不想让我的头文件与实现细节混乱。

3 个答案:

答案 0 :(得分:26)

好吧,我不知道确切的问题,但对于初学者来说:

  • 内联方法应该在头文件中实现。编译器需要知道实际内联的代码。
  • 在类声明中使用“inline”关键字也没有任何效果。但它也不会受到伤害。

另请参阅:c++ faq lite

答案 1 :(得分:3)

  

内联方法应该在头文件中实现。该   编译器需要知道实际内联它的代码。

除非在同一个项目中使用内联函数,否则可能在另一个 #include 其标题的文件中。

我想念库存在这样的限制,因为将标题限制为函数原型可以使事情更具可读性。

#include - .cpp怎么样?

答案 2 :(得分:1)

除了Johan所说的,即使两者都在同一个头文件中,你也不能拥有该函数的单独定义和声明。这适用于类的成员函数。功能代码应采用以下形式:

class someClass
{
void someFunc()
{ ... }
}
// This will make the function inline even w/o the explicit 'inline'

而不是表格

class someClass
{
public:
     void someFunc();
}

void someClass::someFunc()
{ ... }