Хранение вектора в структуре C ++ - PullRequest
0 голосов
/ 03 марта 2010

Почему я не могу сделать это:

struct sName {
  vector<int> x;
};

Для сохранения вектора требуется всего три указателя, поэтому я должен быть в состоянии сделать это?

Ответы [ 3 ]

3 голосов
/ 03 марта 2010

Вы упомянули это не удалось в операторе 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;
}
2 голосов
/ 03 марта 2010
#include <vector>

using namespace std;

struct sName {
  vector<int> x;
};

int main()
{
return 0;
}

Скомпилировано с:

g++ -Wall 1.cpp

Скомпилировано нормально.

В чем проблема с вашим кодом?

0 голосов
/ 03 марта 2010

Вы можете сделать это. Фактически, то, что у вас есть выше, является правильным и работает нормально (за исключением пропущенной точки с запятой и, возможно, отсутствия std:: в std::vector). Пожалуйста, перефразируйте ваш вопрос, чтобы он не противоречил сам себе.

...