C++ 与具有静态链接的函数混淆
我不确定以下代码: .lib项目 单位h 单位.cppC++ 与具有静态链接的函数混淆,c++,linker,C++,Linker,我不确定以下代码: .lib项目 单位h 单位.cpp namespace mynamespace { void myFunction2() { printf("hello world"); } } .exe项目 mainapp.cpp 1) 为什么我会得到myFunction2()的“未解析外部符号”?我包括标题和符号在另一个翻译单元中,怎么了 2) static应表示“具有内部链接”,这是否意味着mainapp.cpp和unit.cpp都将拥有myFunction的“副本”?您需要在命
namespace mynamespace {
void myFunction2() { printf("hello world"); }
}
.exe项目
mainapp.cpp
1) 为什么我会得到myFunction2()的“未解析外部符号”?我包括标题和符号在另一个翻译单元中,怎么了
2) static应表示“具有内部链接”,这是否意味着mainapp.cpp和unit.cpp都将拥有myFunction的“副本”?您需要在命名空间中实现该函数:
void mynamespace::myFunction2() { printf("hello world"); }
目前,在Unit.cpp中,您正在定义一个不同的函数;全局命名空间中名为myFunction2的函数。。。。在命名空间中实现该函数 单位.cpp
namespace mynamespace {
void myFunction2() { printf("hello world"); }
}
#2的答案是“是”,假设您在
Unit.cpp
中包含了Unit.h
。对了,很抱歉没有在第二个函数之前编写它不会有帮助-它仍然在全局命名空间中声明一个新函数void mynamespace::myFunction2(){…}
将定义正确的函数,并且比第一个选项更好,因为它不能声明新函数。什么可以用于类?如果类成员函数定义是在类外部定义的,则还需要使用类名限定它们。
void mynamespace::myFunction2() { printf("hello world"); }
namespace mynamespace {
void myFunction2() { printf("hello world"); }
}