[英]All-public struct yields call to implicitly-deleted default constructor
我理解call to implicitly-deleted default constructor
什么意思,但我不明白為什么我在這里得到它:
struct TransformData{
enum type_t{
kDelay=0,
kScale,
kTranslate,
kRotation
}type;
union data_t{
double delaySeconds;
float scale;
float rotation;
vec3 translate;
}data;
};
然后我有:
TransformData data; //generates error noted in title
POD不應該有一個由編譯器提供的簡單默認構造函數嗎?
如前所述, Vector3<T>
是非POD類型。 根據您問題中的信息,如果您使用的是C ++ 11,則可以將其設為POD類型:
template <typename T>
struct Vector3 {
Vector3() = default; // <--- instead of { }
};
typedef Vector3<float> vec3;
struct TransformData {
union data_t {
double delaySeconds;
float scale;
float rotation;
vec3 translate;
} data;
};
TransformData data;
這樣,你就不會有任何問題將它粘在一個聯合中並保持默認的構造函數。
沒有vec3 translate;
代碼編譯良好vec3 translate;
。
正如您在評論中提到的, translate
的類型是class Vector3
,它是非POD。 union
內部不允許使用非POD數據變量。
g ++的編譯錯誤說明了一切:
錯誤:成員'Vector3 TransformData :: data_t :: vec3',在union中不允許使用構造函數
從(現在)更聰明的g ++獲得獎勵:
注意:不受限制的聯合僅適用於-std = c ++ 11或-std = gnu ++ 11
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.