Неверное преобразование из 'char' в 'char *' при вызове функции (c ++) - PullRequest
0 голосов
/ 08 декабря 2018

каждый раз, когда я пишу loadChar(charVariable,positonOfCharacter) с этим кодом:

bool LoadEntity::loadChar(char * outputChar,int position)
    {
        ifstream file(nameOfFile.c_str());

        if(!(file.good()))
            return false;

        file.seekg(position);
        if(file.get())
        {
            * outputChar = file.get();
            return true;
        }
        else
            return false;
    }`

Я получаю эту ошибку: invalid conversion from 'char' to 'char* Код должен возвращать bool, если функция была запущена правильно, и изменять значение charoutputChar для символа в файле в позиции int.Что вызывает эту проблему?

1 Ответ

0 голосов
/ 08 декабря 2018

Проблема:

char charVariable;
...
loadChar(charVariable, positonOfCharacter); 

Здесь вы пытаетесь передать значение char вместо указателя (т.е. char*), ожидаемого функцией.Это незаконно.

Простое решение:

Используйте адрес своей переменной при вызове функции:

loadChar(&charVariable, positonOfCharacter);    // note the &

Альтернатива:

Если вы не такзнаком с указателями, вы также можете изменить сигнатуру функции и использовать ссылку вместо указателя.Ссылки позволяют изменить значение исходной переменной:

bool LoadEntity::loadChar(char& outputChar, int position)  // note the &
{
    ... 
        outputChar = file.get();      // note: no * anymore
    ...
}

Несвязанная проблема:

Существует проблема с использованием get().Следующее действие приведет к тому, что вы дважды прочитаете файл, но проигнорируете первый ввод:

    if(file.get())
    {
        * outputChar = file.get();
        ...
    }

Кроме того, если нет доступного символа, оператор if все же может быть выполнен и вернет значение, так как нет гарантии что функция вернет 0 .

Предпочтение:

    if(file.get(*outputChar))
    {
        return true;
    }

Не волнуйтесь: выходной символ не изменится, если из файла не будет прочитан ни один символ.

...