【问题标题】:Arrays of undefined size in the constructor C++构造函数 C++ 中未定义大小的数组
【发布时间】:2019-11-26 04:49:21
【问题描述】:

我正在尝试找到一种方法来在类中定义一个未知大小的数组并使用构造函数“填充”它。这是一个简单的示例,可以让您大致了解我要做什么:

#include <iostream>
#include <vector>
using namespace std;

class MyClass{
public:
    string Name;
    double x[];
    double y[];

    MyClass(string aName, double aX, double aY){
        Name=aName;
        x[]=aX;
        y[]=aY;
    }

};

int main() {
  MyClass object1("Object1",{1.0,2.0,3.0},{4.0,5.0,6.0});
}

显然,有很多错误,所以我不知道从哪里开始以及如何实现我的目标!

感谢任何指导。

编辑

这是基于此问题的答案的有效解决方案。谢谢大家!

#include <iostream>
#include <vector>
using namespace std;

class MyClass{
public:
    string Name;
    vector<double> x;
    vector<double> y;

    MyClass(string aName, vector<double> aX, vector<double> aY){
        Name=aName;
        x=aX;
        y=aY;
    }

};

int main() {
  MyClass object1("Object1",{1.0,2.0,3.0},{4.0,5.0,6.0});
  cout<<object1.Name<<endl;
  cout<<object1.x[1]<<endl;
  cout<<object1.y[2]<<endl;
}

【问题讨论】:

  • C++ 不能以这种方式工作。所有数组都必须具有固定大小。否则,使用std::vector
  • 如答案和 cmets 中所述,您无法在 C++ 中执行此操作。查看可用于使用更适合您需求的容器:cplusplus.com/reference/stl

标签: c++ arrays class constructor


【解决方案1】:

标准 C++ 不支持可变长度数组。

在你的情况下std::vector&lt;double&gt; x; &c。几乎是直接替代品,如果你要写的话,当然是

MyClass object1{"Object1",{1.0,2.0,3.0},{4.0,5.0,6.0}};

相反,请注意这不会调用您的构造函数,您可以随意删除而不是尝试修复编译错误。

【讨论】:

    【解决方案2】:

    不确定大小的数组是不完整的类型。不能有不完整类型的变量。因此,您的成员变量格式不正确。数组变量(包括成员)必须具有编译时常量大小。

    如果您需要运行时大小的数组,则需要动态分配它。最简单的解决方案是使用std::vector

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多