2010-05-02 93 views
2

我正在将我的Linux项目转换为使用MinGW在Windows上编译。它编译和运行在Linux上就好了,但是当我尝试使用MinGW它炸弹编译出来,出现以下错误信息: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的内容荒谬简单。

这是代码。第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 

感谢您的帮助。

编辑:谢谢德克和明戈斯,这正是问题所在!

+0

没有什么是明显错误的。你有没有尝试删除'Vector'成员及其相关头文件以排除它们作为问题? – 2010-05-02 21:01:02

+0

包含指令应该在标题后面。如果包含camera.h的文件也包含Vector.h,则将获得无限递归。 – Eva 2012-01-10 17:26:40

回答

3

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

float my_near; 
float my_far; 

我记得Borland公司使用 “近” 与 “远” 作为关键字(我在1992年的Turbo C有这些,早在MS-DOS时代)。不知道,如果这是与海湾合作委员会的情况下,但你可以随时尝试。

3

编辑如果你碰巧包括windef.h(直接或间接),你会发现

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

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

尝试

#undef near 
#undef far 

类定义之前。

+2

如果downvoters实际上可能留下一张纸条,说明他们为什么downvoted,那真的会是有益的。 – Dirk 2010-05-02 21:35:09

+0

我认为最好使用替代变量名称而不是定义它们。 – 2013-10-28 10:58:37

1

<windef.h>,你会发现下面几行:

#define NEAR 
#define near 

答案很简单:你不能#undef他们,因为他们是在Windows头的一部分(_WINDEF_H仍然会被定义即使你#undef这些定义,所以它不会被重新收录,如果你尝试#include <windef.h>一次,更何况事实,如果你#undef _WINDEF_H类定义后使用#include <windef.h>之前,你会喜欢的事情RECT重复定义结束,LONG,PROC等),所以唯一的解决方法是更改​​变量名称。