使用命名空间头文件c ++

时间:2015-05-23 16:17:10

标签: c++ header namespaces

我试图在我编写的某些代码中获得一个好的结构,但我对头文件不太确定。我遇到的一个问题是:我知道我不应该在头文件中包含命名空间,但我不知道还有什么地方可以放置它。

考虑这个标题:

// deck.h
#pragma once
#include <vector>
#include "card.h"

using namespace std;

typedef vector<card> pile;

class deck{
public:
    deck();
    ~deck();
    void shuffle();
    card takeCard();
    int getSize();
private:
    pile cDeck;
};

card.h中的代码是卡结构的定义。 typedef应该在头文件中吗?而且,如何避免使用std :: vector?

任何提示都会受到关注。

3 个答案:

答案 0 :(得分:1)

你完全没有说出来。使用std::vector代替vector,只需输入5个字符。 typedef可以放在头文件中。

正如您可能知道的那样,标题中的using namespace std;是不好的。为什么?因为包含标题的所有文件都会自动use namespace std;,并且相对容易进入冲突名称,尤其是在客户可能不知道using指令的大型项目中/她暗中使用。

或者,您可以在} 里面标题中的内联函数定义,

use namespace std;

或类,

inline void f()
{
    using namespace std;
    cout << "bla" << endl;
}

这样,class Foo { using namespace std; // rest }; 就会被有效地看到&#34;&#34;只在其封闭的范围内。

相关:What's the scope of the "using" declaration in C++?

答案 1 :(得分:0)

删除using指令很简单,只需将代码重写为

即可
// deck.h
#pragma once
#include <vector>
#include "card.h"

typedef std::vector<card> pile;

class deck{
public:
    deck();
    ~deck();
    void shuffle();
    card takeCard();
    int getSize();
private:
    pile cDeck;
};

答案 2 :(得分:0)

使用和使用命名空间可以在您的实现中的函数内使用。如果您想限制上面提到的可能的冲突,那么您确实需要使用&#34;使用&#34;或者&#34;使用命名空间&#34;,将其保存在小函数中。