【发布时间】:2014-08-29 09:57:33
【问题描述】:
我目前遇到了g++ 警告问题,我无法摆脱。我的代码运行良好,但此警告不断弹出:
ChildModel.h:136:24:警告:内联函数 virtual int ChildModel::getLinkCost(const Link&) const 已使用但从未定义 [默认启用]
我目前在 S.O 上找到了 this post,也有同样的问题,但答案是特定于库(定义某些东西),所以它对我不起作用。
我的代码如下:
class Model {
public:
virtual inline int getLinkCost(Link const& link) const;
};
class ChildModel: public Model {
public:
/** Warning on the line bellow: **/
virtual inline int getLinkCost(Link const& link) const;
};
ChildModel重新定义的函数只有Model::getLinkCost,而Model::getLinkCost方法只被Model的方法调用。所有方法都定义在一个 C++ 文件Model.cpp。
【问题讨论】:
-
如果是
inline,如何链接到定义? -
inline这里没有效果。关于警告:它告诉您该函数未定义。所以告诉我们你的Model.cpp(以及你如何编译/链接你的代码)。 -
"所有方法都定义在一个 C++ 文件
Model.cpp。" - 那么它不应该是内联的。必须在每个使用它们的源文件中定义内联函数;所以要么删除inline说明符,要么在标题中定义它。 -
内联虚函数很难被编译器内联。一般来说,我不会打扰他们。
-
@MikeSeymour 好的,所以我理解我的错误。但是为什么即使有这个警告它也能正常工作呢? @NeilKir 既然你这么说,我意识到我的
inline在这种情况下是无用的......