【问题标题】:Initializing struct array with constructor parameters使用构造函数参数初始化结构数组
【发布时间】:2013-11-14 11:49:56
【问题描述】:

如何在构造函数中使用参数初始化结构数组? 现在我有了这个代码:

    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

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

【问题讨论】:

    标签: c++ arrays qt constructor struct


    【解决方案1】:

    起初你的结构是类。 struct 应该在 C++ 中使用,没有方法、继承、封装和其他类的东西,与标准 C 代码中的相同。

    接下来,类名应该大写:名字的第一个字符应该大写,名字中的每个新单词都应该从大写字符开始。顺便说一句,您的公司代码约定可能会覆盖这个在 C++ 代码中几乎无处不在的默认约定。

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

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

    【讨论】:

    • 我可以理解继承和封装,但你为什么不使用struct,比如一个构造函数和一个或两个方法?在 C++ 中,结构和类不是等效的,其中类成员默认是私有的,而不是结构,它们是公共的?
    • 类和结构在 C++ 中是等价的,除了类在默认情况下具有私有访问说明符。两者都可以有成员函数和成员变量。
    • 是的,类和结构在 C++ 中几乎是相同的东西,但是如果 class 表示 C++ class 和 struct 表示 C struct 更好,这样可以更好地阅读和理解代码,不是吗?跨度>
    • 我怎样才能用结构和构造参数初始化向量?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      相关资源
      最近更新 更多