所有公共结构产生调用隐式删除的默认构造函数 [英] All-public struct yields call to implicitly-deleted default constructor

查看:1130
本文介绍了所有公共结构产生调用隐式删除的默认构造函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道调用隐式删除的默认构造函数意味着但我不明白为什么我得到它:

  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; //生成标题中指出的错误



编译器不应该提供一个简单的默认构造函数吗?

$ b $如上所述, 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数据;

这样,你不会有任何问题坚持在一个联合和保持默认构造函数。


I understand what call to implicitly-deleted default constructor means but I do not understand why I am getting it here:

        struct TransformData{
        enum type_t{
            kDelay=0,
            kScale,
            kTranslate,
            kRotation
        }type;

        union data_t{
            double delaySeconds;
            float scale;
            float rotation;
            vec3 translate;
        }data;
    };

Then I have:

TransformData data; //generates error noted in title

Shouldn't a POD have a simple default constructor provided by compiler?

解决方案

As mentioned already, Vector3<T> is a non-POD type. Based on the information in your question, if you're using C++11, you can make it a POD type:

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;

This way, you won't have any problems sticking it in a union and keeping the default constructor.

这篇关于所有公共结构产生调用隐式删除的默认构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆