即使放入头文件c ++,也无法内联函数

sig*_*sen 1 c++ linker inline

我无法内联成员函数.我的代码如下:

Main.cpp的

#include "Foo.h"
int _tmain(int argc, _TCHAR* argv[])
{
    Foo foo;
    int a = foo.myInlinedFunc(2);
}
Run Code Online (Sandbox Code Playgroud)

foo.h中

class Foo
{
public:
    Foo(void);
    ~Foo(void);
    inline int myInlinedFunc(int value);
};
Run Code Online (Sandbox Code Playgroud)

Foo.cpp中

#include "Foo.h"
Foo::Foo(void)
{
}
Foo::~Foo(void)
{
}
int Foo::myInlinedFunc(int value)
{
    return value * value;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Tester.obj:错误LNK2019:未解析的外部符号"public:int __thiscall Foo :: myInlinedFunc(int)"(?myInlinedFunc @ Foo @@ QAEHH @ Z)在函数_wmain 1> E中引用:E:\ Debug\Tester.exe:fatal错误LNK1120:1个未解析的外部

我已经搜索了谷歌的答案,但显示的唯一答案告诉我,我应该将内联关键字放在已经存在的头文件中.

Dav*_*nan 10

您需要将函数体(即定义)放在头文件中.

你的标题需要像这样读:

foo.h中

class Foo
{
public:
    Foo(void);
    ~Foo(void);
    inline int myInlinedFunc(int value)
    {
        return value * value;
    }
};
Run Code Online (Sandbox Code Playgroud)

当然,你还必须删除myInlinedFuncfrom 的定义Foo.cpp.

或者,如果您愿意,可以像这样编写标题代码:

foo.h中

class Foo
{
public:
    Foo(void);
    ~Foo(void);
    int myInlinedFunc(int value);
};

inline int Foo::myInlinedFunc(int value)
{
    return value * value;
}
Run Code Online (Sandbox Code Playgroud)

但最重要的是,如果您需要内联函数并且可供其他翻译单元使用,则其定义必须放在头文件中.

C++ FAQ解释了这一点,甚至预测你的无法解析的外部错误.

  • 那太难了.如果您想要内联,并且可以从另一个翻译单元获得,则必须将该定义放在标题中. (3认同)