内联成员函数的C ++链接错误

时间:2013-03-01 14:41:44

标签: c++

我有以下代码:

IFile.h

class IFile
{
public:
    IFile();
    ~IFile(void);

    inline bool IsValidFileType() const;
};

IFile.cpp

IFile::IFile()
{
    //IsValidFileType();
}

IFile::~IFile(void)
{
}

inline bool IFile::IsValidFileType() const
{
          return true;
}

的main.cpp

int main(int argc, char* argv[])
{
    IFile* pFile = new IFile();
    pFile->IsValidFileType();

    return 0;
}

编译代码时出现以下错误:  错误LNK2019:未解析的外部符号“public:bool __thiscall IFile :: IsValidFileType(void)const”(?IsValidFileType @ IFile @@ QBE_NXZ)在函数_main中引用

如果我为函数更改了“inline”或“const”qualiferes,或者在构造函数中调用它,程序将会编译。 你能解释一下这种行为吗?

4 个答案:

答案 0 :(得分:0)

编译器如何内联一个在编译时无法看到的代码的函数?编译main.cpp时,会要求编译器执行此操作。

答案 1 :(得分:0)

内联函数的代码被编译到引用它的每个翻译单元(毕竟这是个想法)。这意味着,您需要在头文件中包含代码。

答案 2 :(得分:0)

inline关键字向编译器承诺,它将能够在使用它的每个转换单元(* .cpp文件)中看到定义。你打破了这个承诺,因为main.cpp看不到定义,尽管它包含IFile.h。

通常,inline关键字的函数应该在头文件中定义,而不是源文件。

答案 3 :(得分:0)

由于该函数是内联函数,您必须在头文件中定义它,而不是在cpp文件中定义。