如何走到這一步編譯和工作原理: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