-2

我有以下代码:

文件.h

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

    inline bool IsValidFileType() const;
};

文件.cpp

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

IFile::~IFile(void)
{
}

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

主文件

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

    return 0;
}

编译代码时出现以下错误:error LNK2019: unresolved external symbol "public: bool __thiscall IFile::IsValidFileType(void)const" (?IsValidFileType@IFile@@QBE_NXZ) referenced in function _main

如果我更改函数的“内联”或“常量”限定符,或者在构造函数中调用它,程序将编译。你能解释一下这种行为吗?

4

4 回答 4

0

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

于 2013-03-01T14:44:28.330 回答
0

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

于 2013-03-01T14:44:33.700 回答
0

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

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

于 2013-03-01T14:45:08.753 回答
0

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

于 2013-03-01T14:45:28.977 回答