2010-03-03 69 views
-5

爲什麼我不能做到這一點儲存載體:在一個結構C++

struct sName { 
    vector<int> x; 
}; 

只需三分,存儲載體,所以我應該能夠做到這一點?

+10

最新錯誤? – RvdK 2010-03-03 16:23:36

+3

請提供一個小而完整的例子,告訴我們它失敗的方式。 – 2010-03-03 16:27:42

+0

「只需要三個指針來存儲矢量」 - Whaaaaaa? – 2010-03-03 17:13:12

回答

3

mentioned在switch語句中失敗。你需要將其包裝起來的一個額外的一對大括號:

int type = UNKNOWN; 
switch(type) 
{ 
    case UNKNOWN: 
    cout << "try again" << endl; 
    break; 
    case KNOWN: 
    { // Note the extra braces here... 
    struct sName 
    { 
     vector<int> x; 
    } myVector; 
    } // and here 
} 

或者,你可以有已申報的結構,只是想聲明和初始化一個局部變量。這不是struct特有的問題,它會在您嘗試初始化某個變量內的某個變量時發生:

struct sName 
{ 
    vector<int> x; 
}; 

int type = UNKNOWN; 
switch(type) 
{ 
    case UNKNOWN: 
    cout << "try again" << endl; 
    break; 
    case KNOWN: 
    { // Note the extra braces here... 
    sName myVector; 
    } // and here 
    case OTHER: 
    int invalid = 0; // this will also fail without the extra pair of braces 
    break; 
} 
+0

我以前見過這個原因,但爲什麼?這工作,但我不喜歡這個「解決方法」。 – 2010-03-03 16:47:27

+0

@prasoon:交換機內的所有「case」都在相同的範圍內。任何一個變量聲明的變量都在它們的範圍內,但可以跳過初始化。請參閱http://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement – Bill 2010-03-03 16:56:50

+1

@ parasoon99:這不是一種解決方法 - 它利用語言的功能有意和有效的方式。這只是你不習慣的東西。我一直這樣做。 – 2010-03-03 17:00:09

2
#include <vector> 

using namespace std; 

struct sName { 
    vector<int> x; 
}; 

int main() 
{ 
return 0; 
} 

編譯時:

g++ -Wall 1.cpp 

編譯罰款。

什麼似乎是你的代碼的問題?

+0

當我在switch語句中聲明瞭這種類型的「struct sName z」變量時,出現錯誤:'sName z'的交叉初始化和'跳轉到case標籤'。否則,程序工作正常。 – 2010-03-03 16:32:20

+0

@ parasoon99:這是一個完全不同的問題。用新的問題創建一個新帖子,但是這次*包括編譯器錯誤* – 2010-03-03 16:36:12

+0

謝謝 - 將會這樣做。 – 2010-03-03 16:37:40

0

可以做到這一點。事實上,你上面的內容是正確的,並且工作正常(除了缺少分號並且可能缺少std::std::vector)。請重新說明你的問題,以免它與自身矛盾。