我正在尝试根据构造函数的输入参数初始化一个大小为 n 的数组。 这有效:
//Inside Header
class runningAverage{
private:
byte n;
float array[10];
public:
runningAverage(byte);
};
//Inside .cpp
runningAverage::runningAverage(byte a){
n = a;
for (byte i = 0; i<n; i++) {
array[i] = 0;
}
}
这行不通:
//Inside Header
class runningAverage{
private:
byte n;
float array[];
public:
runningAverage(byte);
};
//Inside .cpp
runningAverage::runningAverage(byte a){
n = a;
for (byte i = 0; i<n; i++) {
array[i] = 0;
}
}
我想初始化数组,使其成为 n 指定的大小。这样我就不会通过任意指定 float array[256] 或类似的东西来浪费内存。感谢您的帮助!
最佳答案
你必须实际分配数组;并且你会想要使用指针类型,float array[]
不是你想的那样。正如 juanchopanza 提醒我们的那样,您还需要禁用复制构造函数和赋值运算符,或者实现执行适当深度复制的那些。
//Inside Header
class runningAverage{
private:
byte n;
float *array; // <= correct type
public:
runningAverage(byte);
~runningAverage(); // <= you'll need a destructor to cleanup
private:
runningAverage(const runningAverage &);
runningAverage & operator = (const runningAverage &);
};
//Inside .cpp
runningAverage::runningAverage(byte a){
array = new float[n]; // <= allocate array
n = a;
for (byte i = 0; i<n; i++) {
array[i] = 0;
}
}
// clean up
runningAverage::~runningAverage(){
delete[] array;
}
但是,如果您有一些动态的自动容器供您使用(例如 std::vector
),您可能想改用它 - 那么您就不必处理复制/赋值/析构函数/内存管理。
关于c++ - 在类中初始化可变大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25153153/