定义和声明之间的C ++ Specifier

时间:2016-04-12 12:29:02

标签: c++ oop

我收到了以下声明:

// file MadaPacket.h
class MadaPacket
{
// ....
public:
  inline static bool word_is_header(int w);
}

作为通讯员声明:

// file MadaPacket.cpp
#include "MadaPacket.h"

inline bool MadaPacket::word_is_header(int w)
{
    return w == 0xFBBA;
}

MSVC12构建器在链接时失败,原因如下:

  

未解析的外部符号" public:static bool __cdecl MadaPacket :: word_is_header(int)

向定义添加static会导致错误

  

'静态'不应该用于在文件范围

定义的成员函数

从定义中删除inline会导致错误

  

未解析的外部符号" public:static bool __cdecl MadaPacket :: word_is_header(int)

我想我误解了一些定义 - 声明关系。

修改

显然,如果可能的话,我希望同时拥有两个修饰符。

2 个答案:

答案 0 :(得分:2)

从这两个地方删除inline关键字。

仅当在多个翻译单元中包含的头文件中定义函数时,才应使用inline关键字。好吧,在其他情况下也可以使用它,但这里没有一个适用。

答案 1 :(得分:-1)

.h文件和.cpp文件中,您的定义没有相同的修饰符列表。两个定义应该完全相同,链接器才能找到它们。所以我先从两者中删除'static'并重新编译。