我想知道爲什麼下面的代碼不能編譯。這僅僅是一個展示例子,我不爭論標準集裝箱的繼承等構造函數不會繼承,即使使用`使用`
class A : public std::array<int,3>
{
public:
using std::array<int,3>::array;
// define other methods (no data members)
};
int main(int argc, char **argv) {
A a ({1,2,3});
return 0;
}
編譯器(G ++)抱怨,因爲它只能找到默認的構造函數A()
沉綿我想我做了什麼需要繼承std::array
的構造函數。
是否有人請注意解釋它爲什麼會這樣做,以及如何在不重新定義和轉發隱式構造函數的情況下如何處理該問題?
當然代碼
using A = std::array<int,3>
int main(int argc, char **argv) {
A a ({1,2,3});
return 0;
}
編譯罰款,但我需要添加一些自制的運營商,以適應我的目的。
感謝您的幫助。
'std :: array'沒有構造函數;這是一個聚合。嘗試繼承它們可能是一個壞主意。嘗試繼承'std :: array'可能是一個壞主意。 –
構造函數不是繼承的,它們不可以。它更像是一個具有這種語法的代表。 – luk32
@塞巴斯蒂安:哎呀,我的壞。我忘了那個。而且,是的,繼承std :: array是不好的。我會去地獄,然後;) –