为什么操作数从二进制表达式接收错误消息?

时间:2014-07-24 22:21:35

标签: c++ fstream

我收到以下错误:

  

null和非指针之间的比较(stream aka('basic_fstream')和Null)无效操作数到二进制表达式(stream aka('basic_fstream')和Null)和long')

以下是导致它的代码:

int main()
{
    int arr[20][6];
    fstream dataFile("input.txt", ios::in);
    string input;

    int i,I=0;
    if (dataFile == NULL) // ERROR is on this line
    {
        cout << "can't open file" << endl;
        return 0;
    }
}

1 个答案:

答案 0 :(得分:2)

据推测,您正在学习在C ++ 11之前编写的教程,并且您正在使用C ++ 11编译器。在C ++ 11之前,流类有一个operator void*转换运算符,其中空指针表示错误状态。在C ++ 11中,这已更改为explicit operator bool转换运算符,如果流处于错误状态,则返回false。因此,您应将if语句更改为:

if (!dataFile)

事实上,这一直是检查流状态的惯用方法(因为它也适用于C ++之前的版本)。