Как инициализировать структуру с объединением? - PullRequest
0 голосов
/ 17 января 2019

Как правильно инициализировать структуру, которая содержит объединение? В настоящее время я получаю сообщение об ошибке // 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);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 17 января 2019

По какой причине Вы хотите использовать союз?Союзы отлично подходят для сохранения памяти.В С ++ редко возникает необходимость их использования.Я знаю, что это не ответ на ваш вопрос, но подумайте, нужно ли вам использовать их в этом проекте.

0 голосов
/ 17 января 2019

При инициализации объединения будет инициализирован только первый элемент .Переставьте объединение так, чтобы float real стал первым членом объединения.

Конечно, это означает, что вы не можете использовать других участников в прямой инициализации.

Другое решение состоит в том, чтобыдобавить конструктор в объединение, например, один для члена real, один для члена string и один для члена pointer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...