【问题标题】:C++ Specifier between definition and declaration定义和声明之间的 C++ 说明符
【发布时间】:2016-04-12 12:29:01
【问题描述】:

我得到以下声明:

// 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 builder 链接失败,原因如下:

无法解析的外部符号“public: static bool __cdecl MadaPacket::word_is_header(int)

static 添加到定义推送错误

'static' 不应用于定义在文件范围内的成员函数

从定义中删除inline会推送错误

无法解析的外部符号“public: static bool __cdecl MadaPacket::word_is_header(int)

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

编辑

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

【问题讨论】:

标签: c++ oop


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 声明中的static 肯定没问题?
    • @Biffen 与其他声明不匹配时不匹配。 static 只出现在一个上。它们必须完全匹配。
    • 除了static,它应该在声明中并且不应该在定义中。
    猜你喜欢
    • 2015-06-28
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2013-04-09
    相关资源
    最近更新 更多