【问题标题】:Storing vector in a struct C++将向量存储在结构 C++ 中
【发布时间】:2010-03-03 16:22:11
【问题描述】:

为什么我不能这样做:

struct sName {
  vector<int> x;
};

只需要三个指针来存储一个向量,我应该可以做到吧?

【问题讨论】:

  • 错误是什么?
  • 请提供一个小而完整的例子,并告诉我们失败的原因。
  • "只需要三个指针来存储一个向量" -- Whaaaaa?

标签: c++ stl vector struct nested


【解决方案1】:

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

【讨论】:

  • 我以前也看到过这个原因,但是为什么呢?这可行,但我不喜欢这种“变通”。
  • @prasoon:一个开关中的所有cases 都在同一个范围内。在其中任何一个中声明的变量都在所有它们的范围内,但可以跳过初始化。见stackoverflow.com/questions/92396/…
  • @parasoon99:这不是一种解决方法——它以一种预期且有效的方式利用语言的特性。这只是你不习惯的东西。我一直这样做。
【解决方案2】:
#include <vector>

using namespace std;

struct sName {
  vector<int> x;
};

int main()
{
return 0;
}

编译:

g++ -Wall 1.cpp

编译正常。

您的代码似乎有什么问题?

【讨论】:

  • 当我在 switch 语句中声明这种类型的变量“struct sName z”时,出现错误:“sName z”和“跳转到案例标签”的交叉初始化。否则,程序运行良好。
  • @parasoon99:这是一个完全不同的问题。用新问题创建一个新帖子,但这次包括编译器错误
  • @John:OP(或任何人)不能编辑问题以反映实际问题吗?
【解决方案3】:

可以做到这一点。实际上,您上面的内容是正确的并且工作正常(除了缺少分号并且可能在std::vector 中缺少std::)。请改写你的问题,以免它自相矛盾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多