C ++中的命名空间成员(使用vs不使用)

时间:2013-12-02 23:20:26

标签: c++ namespaces

所以这只是一个奇怪的想法。我暂时拥有以下.h和.cpp文件:

·H:

#ifndef A_H_
#define A_H_

namespace A {
    void FunctionOne();
}

using namespace A;

void FunctionTwo();

#endif

的.cpp:

#include <iostream>
#include "A.h"

using namespace std;

void A::FunctionOne() {
    cout << "Function one!";
}

void A::FunctionTwo() {
    cout << "Function two!";
}

现在,这不起作用。我得到编译时错误“FunctionTwo”不是“A”的成员。但这让我有点困惑。我原以为这只是语法问题。

如果以这种方式声明,FunctionTwo不是A的成员,那么它是什么?

2 个答案:

答案 0 :(得分:4)

using namespace A;namespace A { ... }并不等同。

它允许自动查找来自命名空间A的符号,但这并不意味着它后面的每个声明都会自动声明到该命名空间中。事实上,它对声明几乎没有任何作用。

因此,您的FunctionTwo仍在全局命名空间中,而不是A命名空间的一部分。

答案 1 :(得分:0)

它将是全局命名空间的成员,即::引用的命名空间,在本例中为::FunctionTwo()