我写了一个类,这样的东西(仅用于演示):
class cls{
public:
cls(int a):value(a){}
private:
int value;
};
我想动态创建一个数组,每个元素初始化为一个特定的值,如2:
cls *arr = new cls[N](2);
但是g ++报告了'错误:数组中的括号初始值设定项'。
我搜索了互联网,但却发现了类似int
和double
等基本类型的类似问题,答案是不行的。
假设必须初始化类,如何解决问题?我是否必须放弃建构?
答案 0 :(得分:4)
你可以:
cls *arr = new cls[3] { 2, 2, 2 };
如果您使用std::vector
,则可以:
std::vector<cls> v(3, cls(2));
或
std::vector<cls> v(3, 2);
答案 1 :(得分:3)
使用矢量。
如果你坚持使用动态分配的数组而不是std::vector
,你必须这么做:为数组分配一块内存,然后初始化所有元素一个接一个。除非你真的无法使用矢量,否则不要这样做!这仅用于教育目的。
cls* arr = static_cast<cls*>(::operator new[](N*sizeof(cls)));
for (size_t i = 0; i < N; i++) {
::new (arr+i) cls(2);
}
// ::delete[] arr;
答案 2 :(得分:1)
您也可以使用矢量
#include <vector>
using namespace std;
class cls{
public:
cls(int a):value(a){}
private:
int value;
};
int main() {
vector<cls> myArray(100, cls(2));
return 0;
}
创建一个向量(数组),其中100个cls对象用2初始化;