我试图在我编写的某些代码中获得一个好的结构,但我对头文件不太确定。我遇到的一个问题是:我知道我不应该在头文件中包含命名空间,但我不知道还有什么地方可以放置它。
考虑这个标题:
// 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?
任何提示都会受到关注。
答案 0 :(得分:1)
你完全没有说出来。使用std::vector
代替vector
,只需输入5个字符。 typedef
可以放在头文件中。
正如您可能知道的那样,标题中的using namespace std;
是不好的。为什么?因为包含标题的所有文件都会自动use namespace std;
,并且相对容易进入冲突名称,尤其是在客户可能不知道using
指令的大型项目中/她暗中使用。
或者,您可以在1>} 里面标题中的内联函数定义,
use namespace std;
或类,
inline void f()
{
using namespace std;
cout << "bla" << endl;
}
这样,class Foo
{
using namespace std;
// rest
};
就会被有效地看到&#34;&#34;只在其封闭的范围内。
答案 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;,将其保存在小函数中。