为什么MSDN推荐可能产生"调用重载函数的代码组织是不明确的"

时间:2016-03-16 10:11:06

标签: c++ namespaces

我从MSDN上读到了一些关于如此构造文件的文档 (我在最后添加了tge链接)

x.h

#ifndef _X_H
#define _X_H

namespace project{

int a();

}

#endif

x.cc

#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

我同意他们是用类而不是函数来做的,但我想类在某些情况下会产生类似的错误。

1 个答案:

答案 0 :(得分:0)

问题是.cc示例是错误的。它应该具有相同的namepace project { ... }结构,或者应该具有int project::a的定义。目前,.cc文件在全局命名空间中定义int ::a()