2010-03-03 77 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)。请重新说明你的问题,以免它与自身矛盾。