Как мне обработать ошибку C2398 при работе с пользовательскими классами и структурами? - PullRequest
0 голосов
/ 09 апреля 2020

Я программирую текстовую видеоигру. У меня есть класс consolePrinter, который обрабатывает вывод для отображения. Чтобы облегчить индивидуальную раскраску слов в списках, таких как Inventory, другой пользовательский класс, у меня есть структура, определенная в заголовочном файле consolePrinter, например:

struct ListLineElement {
public:
    ListLineElement(string toPrint) : ListLineElement(toPrint, "White", "Black") {

    }
    ListLineElement(string toPrint, string color) : ListLineElement(toPrint, color, "Black") {

    }
    ListLineElement(string toPrint, string foregroundColor, string backgroundColor) 
        : toPrint(toPrint), foregroundColor(foregroundColor), backgroundColor(backgroundColor) {

    }

    string toPrint;
    string foregroundColor;
    string backgroundColor;
};

Затем в Файл. cpp, я объявил метод listline(), который передает данные строки методу write() для его печати. write() работает, хотя.

Метод listLine() выглядит следующим образом:

void consolePrinter::listLine(initializer_list<pair<ListLineElement, int>> line)
{
    for (auto i : line) {
        write(i.first.toPrint, i.first.foregroundColor, i.first.backgroundColor, i.second);

        Sleep(50);
        for (int i = 0; i < inventoryStringSizes.spacing; i++) {
            cout << ' ';
        }
    }
}

Может показаться сложным (и, возможно, немного уродливым ;-)) иметь `initializer_list> в качестве параметра, но я думаю, что это единственный способ, с помощью которого я смогу написать что-то вроде

consolePrinter::listLine({ 
            {{i.name, i.colorOptions.name.first, i.colorOptions.name.second}, consolePrinter::inventoryStringSizes.name},
            });

без необходимости фактически вызывать конструктор ListLineElement.

Теперь, когда я попробуйте скомпилировать это, компилятор Visual Studio выдает ошибку

error C2398: Element '1': conversion from 'initializer list' to
'std::pair<std::initializer_list<std::string>,int>' requires a
narrowing conversion```

Что я могу сделать, чтобы это исправить? Я уже пытался передать элементы ListLineElement напрямую как initializer_list, а затем вручную их разыграть, но это ничего не дало.

Заранее спасибо; -)

...