我从MSDN上读到了一些关于如此构造文件的文档 (我在最后添加了tge链接)
#ifndef _X_H
#define _X_H
namespace project{
int a();
}
#endif
#include "x.h"
using namespace project;
int a(){
return 1;
}
int b(){
return a();
}
编译时我得到:
x.cc: In function ‘int b()’:
x.cc:10:11: error: call of overloaded ‘a()’ is ambiguous
return a();
^
x.cc:5:5: note: candidate: int a()
int a(){
^
In file included from x.cc:1:0:
x.h:6:5: note: candidate: int project::a()
int a();
^
我知道为什么会发生这种错误,我知道如何修复它。
问题是MSDN推荐这种方式还是组织源文件的原因?
这是链接
https://msdn.microsoft.com/en-us/library/5cb46ksf.aspx#Anchor_1
我同意他们是用类而不是函数来做的,但我想类在某些情况下会产生类似的错误。
答案 0 :(得分:0)
问题是.cc示例是错误的。它应该具有相同的namepace project { ... }
结构,或者应该具有int project::a
的定义。目前,.cc文件在全局命名空间中定义int ::a()
。