【发布时间】:2020-12-11 01:54:24
【问题描述】:
考虑以下类MyStruct:
struct MyStruct
{
int x;
int y;
MyStruct(int i, int j):
x(i), y(j)
{
}
};
请注意,MyStruct 没有默认析构函数。
下面代码中的赋值m["AAAA"] = MyStruct(1, 1) 无法编译:
int main(int, char**)
{
map<string, MyStruct> m;
m["AAAA"] = MyStruct(1, 1);
return 0;
}
为什么我需要MyStruct 的默认构造函数?为什么上面的代码无法编译?
【问题讨论】:
-
编译器会为你生成一个。就像 Java。
-
您认为
m["AAAA"]会做什么?你的教科书或documentation 是怎么说的?你明白为什么它需要一个默认构造函数了吗?你明白为什么你的类型没有一个吗? -
为什么不在你的问题中包含编译错误信息?
-
@BaileyKocin OP 已经定义了构造函数
MyStruct(int i, int j),所以默认构造函数是not默认创建的。这也是 OP 观察到的,并在询问为什么所示示例需要默认值。