(非常)简单的C++程序中的编译器问题,它从文件中获取数字输入

Gra*_*tts 2 c++ compiler-construction macos file-io constants

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

const int FILENAME_MAX=20;

int main() {

    ifstream input;
    char name[FILENAME_MAX + 1];
    int value;

    do {

        cout << "Enter the filename (maximum of " << (FILENAME_MAX+1) 
        << " characters: ";
        cin >> name;
        input.open(name);

    } while(input.fail() );

    while(input >> value) {
    int count=1;

    cout << "value #" << count << "\t" << value << endl;

    count++;
    }

return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是一段非常简单的代码,用于从文件中读取一些数字.不幸的是我无法编译.在"const int FILENAME_MAX = 20;"行之后/上有一个错误 错误显示"数字常量之前预期的非限定id".

有人可以告诉我我做错了什么吗?


我正在使用Xcode 3.0在Mac OS 10.5.8上进行编译

GMa*_*ckG 6

FILENAME_MAX是由标准库*定义的宏,因此它已被用作标识符.当您尝试将其用作标识符时,它实际上在预处理期间被替换为某个数字.数字不是有效的标识符,因此您会收到错误.(这就是为什么它说"我期待一个标识符,而不是一个数字常量.")

将其重命名为其他内容.(或者使用std::string,虽然看起来你还没到那里.)

*由...定义<cstdio>.虽然您不直接包含它,但其他标准库头可以随意包含任何其他标准头文件.