當我嘗試在GCC上編譯我的程序時遇到了一個問題,並且有興趣知道如何使用C++ 11的初始化語法e.g. struct { int a; int b} my_struct {1, 2}
可移植地初始化一個繼承的POD結構。該問題可以用下面的代碼在MSVC上編譯得很好來代表。如何初始化可移植派生類中的繼承模板化POD結構?
#include <iostream>
template <typename A>
struct base {
A a;
};
template <typename A>
class derived : public base<A> {
public:
derived();
};
template <typename A>
derived<A>::derived() : base {1} {
std::cout << "Constructed " << a << std::endl;
}
int main() {
derived<int> d1;
}
然而,GCC與C++ 14啓用大致指出derived<A>
沒有任何字段 '基礎'。所以我嘗試了以下更改。
template <typename A>
derived<A>::derived() : base<A> {1} {
std::cout << "Constructed " << a << std::endl;
}
GCC現在可以識別base<A>
爲derived<A>
罰款的領域,但指出a
未在此範圍內聲明。
有趣的是,這個改變現在不能在MSVC上編譯,並且狀態「'{':缺少函數頭(舊式正式列表?)」。
在這一點上,我不知道如何以符合標準的方式編寫這個。
謝謝。
它編譯我的VS15 .... – ZivS
...但不是他的最後一個例子,在VS15這隻能更換時':基地'通過':base'。 – zett42
我正在談論「base '的最後一個例子。 (VS15更新3) – ZivS