和集合を含む構造体を適切に初期化するにはどうすればよいですか?現在、エラーが発生します// error C2440: 'initializing': cannot convert from 'float' to 'const char *'
#include <stdio.h>
using namespace std;
typedef enum {STRING, REAL, POINTER } Type;
const struct Entry {
union {
const char *string;
float real;
void *pointer;
};
Type type;
LPCSTR Key;
LPCSTR Name;
}f;
const Entry Entries[] = {
{{0.5f}, REAL, "Key", "Name" } // error C2440: 'initializing': cannot convert from 'float' to 'const char *'
};
int main(int argc, char **argv)
{
for (int i = 0; i < size(Entries); i++)
{
switch Entries[i].type
{
case STRING:
printf("Type string; Value: %s\n", Entries[i].string);
case REAL:
printf("Type string; Value: %d\n", Entries[i].real);
}
}
}
ユニオンを初期化すると、最初のメンバーのみが初期化されます。ユニオンfloat real
の最初のメンバーになるようにユニオンを再配置します。
もちろん、それは直接初期化で他のメンバーを使用できないことを意味します。
他の解決策は、のための1つのように、労働組合にコンストラクタを追加することであるreal
ための部材で、1string
の部材とのための1つのpointer
メンバー。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加