C++ 错误:‘;文件编号’;未在此范围中声明

C++ 错误:‘;文件编号’;未在此范围中声明,c++,c++11,makefile,C++,C++11,Makefile,我正在Windows8上运行Cygwin,试图为我想修改的游戏编译源代码。不幸的是,我在构建涉及fileno函数的文件时遇到了一些错误。在做了一些谷歌搜索之后,问题似乎与c++11支持有关(我不确定这意味着什么)。人们发现的大多数解决方案都涉及在编译时添加一些选项,如-std=c++0x或-std=c++11,但我尝试将这些选项添加到makefile中的尝试失败了,我不知道这是否是导致问题的原因。我将包含引发错误的代码段和指向makefile的链接,因为它非常大。你能给我的任何建议都很好 引发错

我正在Windows8上运行Cygwin,试图为我想修改的游戏编译源代码。不幸的是,我在构建涉及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;
    }

它被托管在github上


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

将makefile中的
-std=c***
更改为
-std=gnu++0x
应该可以解决您的问题

如果你不知道什么是
c++11
,你很可能根本就不使用它

另外,如果您需要
c++11
支持,您也可以这样做:
-std=gnu++11
,而不是windows的
-std=gnu++0x

fileno()
已弃用:


改为使用
\u fileno()

你有
\include
吗?是的,可能是我在发布前查看过的那一个的重复,并尝试添加它建议的选项,但没有成功。我希望得到一些关于如何解决该问题或该选项在makefile中的位置的建议。您是否尝试过将标准设置为-std=gnu++0x?否,
fileno()
不是“不推荐的”。它是。微软“反对”各种标准函数。我的愤世嫉俗者说微软创造了所有这些假“贬损”来愚弄人们编写非可移植代码。来自微软的第一个URL表示:“这个POSIX函数被弃用。”使用ISO C++的一致性,而不是Fielo。“这就是为什么我在回答的开头提到了“for Windows”…因为此信息是在windows上下文中提供的,不应脱离上下文。如果这个答案令人困惑且没有帮助,我想我们可以编辑或删除它?在
fileno()
的情况下,Microsoft不能声称符合POSIX标准,然后声明
fileno()
已“弃用”,因为POSIX没有弃用
fileno()
。此外,微软对其他功能的“贬低”违反了他们试图声称支持“代码>文件FILNOR()/<代码>的“ISDC++”。例如,代码> fOpen[])/代码>,被列为(CONT)表134所需的C++函数。对于微软的“弃用”,更糟糕的是,它们提供的替代功能是微软使用那些“贬义”来推动“……不能被认为是符合或可移植的”功能。现在你有了更多关于微软“不赞成”的完整背景。