如何走到这一步编译和工作原理:C++初始化列表与auto_ptr的
class MyObject {
public:
MyObject() {}
};
struct ItemGood {
int Number;
MyObject *Object;
ItemGood(int Number, MyObject *Object) {
this->Number = Number;
this->Object = Object;
}
};
const ItemGood ItemGoodList[] =
{
{ 0, new MyObject() },
{ 1, new MyObject() }
};
而这并不在所有的编译:
class MyObject {
public:
MyObject() {}
};
struct ItemBad {
int Number;
std::auto_ptr<MyObject> AutoObject;
ItemBad(int Number, MyObject *Object) {
this->Number = Number;
AutoObject = std::auto_ptr<MyObject>(Object);
}
};
const ItemBad ItemBadList[] =
{
{ 0, new MyObject() },
{ 1, new MyObject() }
};
错误编译器吐出的是:
没有匹配函数调用'ItemBad :: ItemBad(ItemBad)
我不明白为什么有些东西想要调用构造函数,我不明白这个构造器列表中实际发生了什么。
其中c ompiler?对我来说编译得很好(gcc 4.6.1)。 –
MinGW的-32 4.4,嗯,我不知道为什么出现这种情况 – oggmonster
GCC 4.5.2不能编译,给出了同样的错误 – higuaro