假设我有这个简化的类:
class A {
this(const char* result)
{
this.result = result;
}
private:
union{
const char** results;
const char* result;
}
}
编译失败,构造函数 app.A.this 缺少 const 字段结果的初始值设定项
。我知道如果删除联合定义中的 const 限定符就可以编译它,但我知道成员是 const。
编辑:
当我将代码更改为:
class A {
this(const char* result)
{
this.U.result = result;
}
private:
union U {
const char** results;
const char* result;
}
}
我收到另一个错误:错误:需要“this”作为“const(char*)”类型的“结果”
。
顺便说一句,我使用 dmd v2.068.2
最佳答案
最简单的方法就是初始化它:
this.results = null;
this.result = result;
确保首先设置您不使用的那些,因为您不想用 null 覆盖联合!
您还可以将其设为命名联合:
union A{
const char** results;
const char* result;
}
A a;
this(const char* result)
{
this.a.result = result;
}
然后编译器意识到它们都是一个字段,并且只要求初始化一次。
我认为您的代码无法工作可以说是一个错误...看起来编译器以相同的方式对待匿名联合和结构,而联合应该不同,因为一个变量涵盖了所有这些。
但是简单地设置这两个方法就可以了,所以我现在就是这样做的。编辑:实际上,我想我更喜欢命名联合选项。那么后面看代码的时候就更明显一点了,他们是在一起的。
关于d - 如何使用联合常量成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33415489/