使用构造函数参数初始化struct数组

时间:2013-11-14 11:49:56

标签: c++ arrays qt constructor struct

如何在构造函数中使用参数初始化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;
        }
     };

    ...

然后我需要使用参数:

来初始化roundMatrix数组
    roundMatrix rounds[roundsNumber](teamsNumber);

我收到了一个错误:

variable-sized object 'rounds' may not be initialized

还有一个问题。如何使用struct和构造函数参数初始化vector?

2 个答案:

答案 0 :(得分:2)

您不能以这种方式初始化数组。它应该写成:

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

或者,您需要为roundMatrix类实现一个默认构造函数,它将自动初始化数组中的项目。

答案 1 :(得分:2)

首先你的结构是类。 struct应该在C ++中使用,不需要方法,继承,封装和其他类的东西,就像标准C代码一样。

接下来,类名应该在上面的驼峰案例中:名称的第一个字符应该是大写的,名称中的每个新单词都应该从大写字符开始。顺便说一句,您的公司代码约定可能会覆盖此默认约定,该约定几乎用于C ++代码中的所有位置。

最后:如果你有这个类的对象数组,你不能在初始化期间为这个类的每个对象调用构造函数。你可以这样做:

roundMatrix *rounds = new roundMatrix[roundsNumber];

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