可能重複:
Scoped using-directive within a struct/class declaration?
Why 「using namespace X;」 is not allowed inside class/struct level?爲什麼我不能在C++結構體中使用命名空間指令?
我想向大家介紹只的std :: string到結構。 爲什麼下面被認爲是非法的?
#include <iostream>
#include <string>
struct Father
{
using std::string;
string sons[20];
string daughters[20];
};
但奇怪的是,我可以做一個函數繼
int main()
{
using std::string;
}
更新:C++使用具有不同的語義相同的關鍵字。
C++使用關鍵字「using」將數據成員或函數從基類引入當前類。因此,當我寫一個struct聲明中使用std :: string時,編譯器假定我試圖從基類std中引入一個成員。但std不是基類,而是一個命名空間。 因此
struct A
{
int i;
}
struct B:A
{
using A::i; // legal
using std::string// illegal, because ::std is not a class
}
相同的「使用」關鍵字也用於訪問特定的命名空間的成員。
所以,我猜編譯器根據聲明的位置決定「使用」的語義。
請**不要**在編輯問題時刪除自動插入的「可能重複」鏈接。我知道你更新了,以解釋爲什麼你認爲它不是*建議問題的重複,這是完全可以接受/鼓勵的行爲。但是,您應該讓您的編輯碰到問題並吸引注意列表中的用戶重新公開投票,或者使用「標誌」鏈接要求版主根據您的更新檢查並重新打開投票。刪除自動插入的鏈接是非常不鼓勵的;系統將在重新打開時將其刪除。 – 2012-03-25 08:01:17
(如果在這種情況下刪除它是一個意外 - 即,您的編輯時間相撞 - 然後我爲嚴厲的聲音道歉,請將它作爲未來的好建議!:-)) – 2012-03-25 08:02:35