簡體   English   中英

使用名稱空間頭文件C ++

[英]Using namespace header file c++

我正在嘗試在編寫的某些代碼中獲得良好的結構,但是我不太確定頭文件。 我遇到的問題之一是:我知道我不應該在頭文件中包含名稱空間,但是我不知道將其放置在何處。

考慮以下標頭:

// 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?

任何提示將被應用。

你根本不放。 使用std::vector而不是vector ,只需鍵入5個其他字符。 typedef可以放在頭文件中。

如您所知, using namespace std; 標頭中的是BAD。 為什么? 因為所有包含標頭的文件都會自動use namespace std; ,而且名稱沖突也相對容易,尤其是在大型項目中,客戶可能不知道自己隱式使用的using指令。

另外,您可以use namespace std; 標題的內聯函數定義中,

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

或課程,

class Foo
{
using namespace std;
    // rest
};

這樣,僅在其包圍范圍內有效地“看到”了using情況。

相關: C ++中“ using”聲明的范圍是什么?

刪除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;
};

使用和使用名稱空間可以在實現中的函數內使用。 如果您要如上所述限制可能的沖突,並且確實需要使用“使用”或“使用命名空間”,請把它放在較小的函數中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM