我是C ++语言的新手,我想了解为什么下一件事发生:
我有一个头文件header.h
namespace myNamespace{
class myClass{
public:
myClass();
~myClass();
void myFunction(void);
}
void myVoid();
}
定义在header.cpp
using namespace myNamespace;
void myClass::myFunction(void){
//DO anything
}
void myVoid(){
//Do anything
}
在main.cpp
中,我有以下内容:
#include "header.h"
main(){
myVoid();
myNamespace::myVoid();
}
为什么如果我尝试从主目录调用类myFunction
的{{1}},则编译成功,并且如果尝试像在主文件中一样调用函数,则会出现未定义的引用错误?如果在myClass
中将header.h
从命名空间中移出,我可以修复它。
为什么会这样?我试图弄清楚它是如何工作的。
感谢您的咨询,
答案 0 :(得分:0)
如果您没有指定flatMap
的定义(我的意思是像您一样声明它),那么编译器将永远无法确定您是要实现在名称空间中声明的函数还是仅定义一个新的函数一。
另一方面,如果要定义myVoid
,则必须是在已定义的类中声明的方法。
为清楚起见,请研究以下代码并查看here (very similar question)
myClass::myFunction