C++ 与具有静态链接的函数混淆

C++ 与具有静态链接的函数混淆,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的“副本”?您需要在命

我不确定以下代码:

.lib项目

单位h

单位.cpp

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"); }
}