为什么我在Qt Creator中收到此警告:`inline function'bool Lion :: growl()'使用但从未定义?
我仔细检查了我的代码,并声明了
inline bool growl ()
(Lion
)中的 lion.h
以及lion.cpp
中的相应实现:
inline bool Lion::growl ()
发生了什么事?
编辑:我的假设是在.cpp文件中定义实际的内联方法是合法的(inline
关键字警告编译器在其他地方查找方法体),或者我错了吗? / p>
我不想让我的头文件与实现细节混乱。
答案 0 :(得分:26)
好吧,我不知道确切的问题,但对于初学者来说:
另请参阅: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()
{ ... }