代码之家  ›  专栏  ›  技术社区  ›  Bob Somers

明和“声明不声明任何事情”

  •  3
  • Bob Somers  · 技术社区  · 14 年前

    我正在使用mingw将我的一个linux项目转换为在windows上编译。它在Linux上编译和运行得很好,但是当我试图用mingw编译它时,它会弹出以下错误消息:

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

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

    1. 我在Linux和Windows上(通过MingW)使用相同版本的G++(4.4)。
    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
    

    谢谢你的帮助。

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

    3 回复  |  直到 14 年前
        1
  •  3
  •   mingos    14 年前

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

    float my_near;
    float my_far;
    

    我记得Borland使用“near”和“far”作为关键字(我1992年的TurboC在MS-DOS时代就有了这些)。不知道如果GCC是这样的,但你可以一直尝试。

        2
  •  4
  •   Dirk    14 年前

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

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

    在那里。我想,这就是罪魁祸首。

    尝试

    #undef near
    #undef far
    

    在你的类定义之前。

        3
  •  1
  •   Dustin    14 年前

    <windef.h> ,您将在以下行中找到:

    #define NEAR
    #define near
    

    简单回答:你不能 #undef 因为它们是windows头文件的一部分(即使您 第二乐章 这些定义,所以如果你试图 #include <windef.h> 再说一次,更不用说如果你 #undef _WINDEF_H 使用前 #包括<windef.h> 在类定义之后,您将得到重复的定义,比如rect、long、proc等等),所以唯一的另一个解决方案是更改变量名。