Bil*_*ean 1 c++ linker linker-errors
我的函数test被添加到两个不同的.cpp文件中,并且这些函数对于各自的文件是私有的,如下所示
test1.cpp
#include <iostream>
using namespace std;
void test()
{
cout << "test" << endl;
}
Run Code Online (Sandbox Code Playgroud)
test2.cpp
#include <iostream>
using namespace std;
void test()
{
cout << "test" << endl;
}
Run Code Online (Sandbox Code Playgroud)
main.cpp
#include <iostream>
using namespace std;
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在链接期间我收到错误multiple definition of test()- 但考虑到这两个文件有自己的私有范围,这怎么可能!?如果我在每个文件的相应标头中包含函数原型我可以理解它.cpp,但在这个例子中没有这样的东西。
您需要inline为此关键字:
inline void test()
{
cout << "test" << endl;
}
Run Code Online (Sandbox Code Playgroud)
这允许您在单独的源文件中拥有多个定义,而不会违反单一定义规则。但是,请注意,该函数仍然具有外部链接,并且它们都将解析为相同的地址。还:
内联函数应在使用 odr 的每个翻译单元中定义,并且在每种情况下都应具有完全相同的定义
如果您想要具有不同地址(内部链接)的单独函数,请改用关键字static。
| 归档时间: |
|
| 查看次数: |
4808 次 |
| 最近记录: |