我有一个非常简单的程序,我在其中定义自己的命名空间,需要有一个内联函数。这看起来像下面这样:
test.h
#ifndef _TEST_H_
#define _TEST_H_
#include <iostream>
using namespace std;
namespace NS
{
class EXAMPLE
{
int i;
float f;
public:
void doSth();
};
}
#endif
TEST.CPP
#include "test.h"
namespace NS
{
inline void EXAMPLE::doSth()
{
cout << i << f << "\n";
}
}
的main.cpp
#include "test.h"
int main()
{
NS::EXAMPLE e;
e.doSth();
return 0;
}
我这样编译:{{1}}导致
g++ main.cpp test.cpp -o app
有什么想法吗?
答案 0 :(得分:0)
inline
函数必须在使用它的所有翻译单元中定义为inline
,并且定义相同。
基本上这意味着(1)仅在一个翻译单元中使用它,或者(2)将定义放在包含在使用该函数的每个翻译单元中的标题中。
用例(1)是需要inline
的提示效果的地方,它指示编译器在生成的机器代码中考虑是否内联对函数的调用。用例(2)是关于inline
提供的保证,这种在多个翻译单元中的使用并不违反一个定义规则(或ODR,因为它通常被称为)