调用函数时从'char'到'char *'的无效转换(C ++)

时间:2018-12-08 15:59:08

标签: c++ pointers char type-conversion

每次我用以下代码写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并将char outputChar的值更改为int位置文件中的字符。是什么原因导致这个问题?

1 个答案:

答案 0 :(得分:0)

问题:

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并返回ture,因为没有保证that the function will return 0

首选:

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

不要担心:如果无法从文件中读取任何char,则不会更改输出char。