MinGW和“声明没有声明任何东西”

时间:2010-05-02 20:54:10

标签: g++ compiler-errors mingw

我正在努力将我的Linux项目转换为使用MinGW在Windows上编译。它在Linux上编译并运行得很好,但是当我尝试使用MinGW编译它时,它会弹出以下错误消息:

camera.h:11: error: declaration does not declare anything
camera.h:12: error: declaration does not declare anything

我有点困惑为什么会这样,因为

  1. 我在Linux和Windows上使用相同版本的g ++(4.4)(通过MinGW)。
  2. camera.h的内容非常简单。
  3. 这是代码。它在第11和第12行窒息,float near;float far;被定义。

    #include "Vector.h"
    
    #ifndef _CAMERA_H_
    #define _CAMERA_H_
    
    class Camera{
    public:
      Vector eye;
      Vector lookAt;
      float fov;
      float near;
      float far;
    };
    
    #endif
    

    感谢您的帮助。

    编辑:感谢Dirk和mingos,这正是问题!

3 个答案:

答案 0 :(得分:4)

修改如果您恰好包含windef.h(直接或间接),您会找到

#define FAR
#define far
#define NEAR
#define near

那里。我认为,这是罪魁祸首。

尝试

#undef near
#undef far
在课堂定义之前

答案 1 :(得分:3)

尝试给他们不同的名字,比如

float my_near;
float my_far;

我记得Borland使用“near”和“far”作为关键词(我的1992 Turbo C有这些,回到MS-DOS时代)。 Dunno如果是gcc就是这种情况,但你可以随时尝试。

答案 2 :(得分:1)

<windef.h>中,您可以找到以下几行:

#define NEAR
#define near

简单回答:你不能#undef他们因为他们是Windows标题的一部分(即使你#undef这些定义,仍然会定义_WINDEF_H,所以它不会被重新定义 - 如果你再次尝试#include <windef.h>,那就更好了,更不用说如果你在课程定义之后使用#undef _WINDEF_H之前#include <windef.h>,你最终会得到像RECT这样的重复定义,LONG,PROC等等,所以唯一的其他解决方案是更改变量名称。