错误:未在此范围内声明'fileno'

时间:2015-04-17 06:45:56

标签: c++ c++11 makefile

我在Windows 8上运行Cygwin,尝试编译我想要mod的游戏的源代码。不幸的是,我在构建涉及fileno函数时遇到了一些错误。做了一些谷歌搜索似乎问题可能与c ++ 11支持有关(我不确定这意味着什么)。人们发现的大多数解决方案都涉及在编译时添加一些选项,如-std = c ++ 0x或-std = c ++ 11,但是我尝试将选项添加到makefile中的尝试都没有成功,而且我没有尝试过。我知道这是否会引起问题。我将包含抛出错误的代码片段以及指向makefile的链接,因为它非常大。你能给我的任何建议都会很棒。

抛出错误的代码:

    time_t file_modtime(FILE *f)
    {
        struct stat filestat;
        if (fstat(fileno(f), &filestat))
            return 0;

        return filestat.st_mtime;
    }

Link to Makefile

它正在github上托管

编辑:在得到一些建议之后,我在makefile周围找到并发现了五个使用-std选项的实例,玩它们并没有改变任何东西。我的Cygwin配置有问题吗?我在我正在构建的游戏的安装指南中安装了我被告知需要的软件包。

2 个答案:

答案 0 :(得分:9)

将生成文件中的-std=c***更改为-std=gnu++0x可以解决您的问题。

如果你不知道c++11是什么,你最有可能不会使用它。

此外,如果您需要c++11支持,您也可以:-std=gnu++11代替-std=gnu++0x

答案 1 :(得分:0)

对于Windows ...

caseno = input('input your case no'); switch (caseno) case 1 disp('this first section will run'); case 2 disp('this second section will run'); otherwise disp('wrong case no'); end 已过时:https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/posix-fileno?view=vs-2017

使用fileno()代替:https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fileno?view=vs-2017