2013-11-14 3 views
0

Как инициализировать массив struct с параметрами в конструкторе? Теперь у меня есть этот код:Инициализация структурного массива с параметрами конструктора

struct roundMatrix { 
     private: 
      int **matrix; 

     public: 
      roundMatrix(int teamsNumber) { 
       matrix = new int*[teamsNumber]; 
       for(int i=0;i<teamsNumber;i++) { 
        matrix[i] = new int[teamsNumber]; 
       } 
      } 

      int addPartners(int first, int second) { 
       if(matrix[first][second] == -1 && matrix[second][first] == -1) { 
        matrix[first][second] = 0; 
        matrix[second][first] = 0; 
      } 
      else { 
       return -1; 
      } 
      return 0; 
     } 
    }; 

    ... 

Тогда мне нужно inintialize массив roundMatrix с параметром:

roundMatrix rounds[roundsNumber](teamsNumber); 

И я получил ошибку:

variable-sized object 'rounds' may not be initialized 

еще один вопрос. Как я могу инициализировать вектор с помощью структурных и конструкторских параметров?

ответ

2

Сначала ваша структура является классом. struct следует использовать в C++ без методов, наследования, инкапсуляции и других вещей класса так же, как в стандартном C коде.

Далее имена классов должны быть в верхнем регистре верблюда: первый символ имени должен быть в верхнем регистре, и каждое новое слово в имени должно начинаться с символа верхнего регистра. Кстати, ваши соглашения с корпоративным кодом могут переопределять это соглашение по умолчанию, которое почти везде используется в коде на C++.

И последнее: если у вас есть массив объектов этого класса, вы не можете вызвать конструктор для каждого объекта этого класса во время инициализации. Вы можете сделать что-то вроде этого:

roundMatrix *rounds = new roundMatrix[roundsNumber]; 

for(i = 0; i < roundsNumber; i++) 
    rounds[i] = roundMatrix(teamsNumber); 
+0

Я могу понять наследование и инкапсуляцию, но почему бы вам не использовать 'struct' с, скажем, конструктором и методом или двумя? не являются строками и классами, эквивалентными в C++, где члены класса являются закрытыми по умолчанию, в отличие от структур, где они являются общедоступными? – stellarossa

+0

Классы и структуры эквивалентны в C++, за исключением того, что классы имеют спецификатор частного доступа по умолчанию. Оба могут иметь функции-члены и переменные-члены. – vahancho

+0

Да, классы и структуры почти одинаковы в C++, но лучше, если класс будет означать 'C++ class', а struct будет означать' C struct' для лучшего чтения и понимания кода, не так ли? –

2

Вы не можете инициализировать массив таким образом. Оно должно быть написано как:

roundMatrix rounds[roundsNumber] = {teamsNumber, teamsNuber, ...); 

В качестве альтернативы вам нужно реализовать конструктор по умолчанию для roundMatrix класса, который будет автоматически инициализировать элементы в массиве.

Смежные вопросы