none
为什么用define定义了常量还是出现未声明标识的错误呢,好奇怪 RRS feed

  • 问题

  • 真是搞不懂,请看
    //ChunkID.h
    #define MAT_NAME         0xA000
    #define MAT_AMBIENT      0xA010
    #define MAT_DIFFUSE      0xA020
    #define MAT_SPECULAR     0xA030
    #define MAT_SHININESS    0xA040

    #define COLOR_RBG        0x0010
    #define COLOR_F          0x0011




    //Model3ds.cpp
    #include"ChunkID.h"

    void Model3ds::ReadMaterial(Chunk chunk)
    {
     int datasize=(int)(chunk.Len-ChunkheadSize());
     Chunk mychunk;
     float r,g,b;
     Material mat;
     while(datasize>0)
     {
      ReadChunk(mychunk);
      datasize=datasize-mychunk.Len;
      switch(mychunk.ID)
      {
      case MAT_NAME:
       mat.name=Readstring();
       break;
      case MAT_AMBIENT:
       ReadColor(r,g,b);
       mat.AmbientColor[0]=r;
       mat.AmbientColor[1]=g;
       mat.AmbientColor[2]=b;
       break;
      case MAT_DIFFASE:
       ReadColor(r,g,b);
       mat.DiffuseColor[0]=r;
       mat.DiffuseColor[1]=g;
       mat.DiffuseColor[2]=b;
       break;
      case MAT_SPECULAR:
       ReadColor(r,g,b);
       mat.SpecularColor[0]=r;
       mat.SpecularColor[1]=g;
       mat.SpecularColor[2]=b;
       break;
      case MAT_SHININESS:
       
       break;
      default:
       IgnoreChunk(mychunk);
      }
     }
    }


    调试出现以下:
    1>e:\c++练习\load3ds\load3ds\model3ds.cpp(160) : error C2065: “MAT_NAME”: 未声明的标识符
    1>e:\c++练习\load3ds\load3ds\model3ds.cpp(160) : error C2051: case 表达式不是常量
    1>e:\c++练习\load3ds\load3ds\model3ds.cpp(169) : error C2065: “MAT_DIFFASE”: 未声明的标识符
    1>e:\c++练习\load3ds\load3ds\model3ds.cpp(169) : error C2051: case 表达式不是常量
    1>e:\c++练习\load3ds\load3ds\model3ds.cpp(181) : error C2065: “MAT_SHININESS”: 未声明的标识符
    1>e:\c++练习\load3ds\load3ds\model3ds.cpp(181) : error C2051: case 表达式不是常量
    1>e:\c++练习\load3ds\load3ds\model3ds.cpp(217) : error C2065: “COLOR_RGB”: 未声明的标识符
    1>e:\c++练习\load3ds\load3ds\model3ds.cpp(226) : error C2065: “COLOR_F”: 未声明的标识符


    请问一下为什么会出现这种报错呢?我明明声明了标识符,为什么又说未声明呢?而其它几个标识符又为什么没报错呢?请高手给个解释

    2009年12月10日 18:24

答案

  • 你确认ChunkID.h 和 Model3ds.cpp 是在同一个路径下吗?
    • 已标记为答案 谐音 2009年12月25日 12:38
    2009年12月16日 4:48
    版主
  • 同意Michael,可能是ChunkID.h并没有成功的包含进来。确认是ChunkID.h 和 Model3ds.cpp是否在同一个路径下,或者ChunkID.h是否包含在VC include的目录下。


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    • 已标记为答案 谐音 2009年12月25日 12:38
    2009年12月16日 9:38

全部回复

  • 是否调用了#undef?
    麻烦把正确答案设为解答。
    2009年12月11日 1:04
    版主
  • 没有调用#undef。。这问题搞得我一夜睡不好,真不知道错在哪里
    2009年12月11日 12:52
  • 检查一下你的头文件中,是否使用了

    #ifndef ___XXXX___
    #define ___XXXX___



    #endif//___XXXX___

    这样的,防止多次 include 的宏。如果用了,检查这个 ___XXXX___ 是否和其他头文件冲突。
    2009年12月14日 7:06
  • 你确认ChunkID.h 和 Model3ds.cpp 是在同一个路径下吗?
    • 已标记为答案 谐音 2009年12月25日 12:38
    2009年12月16日 4:48
    版主
  • 同意Michael,可能是ChunkID.h并没有成功的包含进来。确认是ChunkID.h 和 Model3ds.cpp是否在同一个路径下,或者ChunkID.h是否包含在VC include的目录下。


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    • 已标记为答案 谐音 2009年12月25日 12:38
    2009年12月16日 9:38
  • 我想也应该是这个问题吧,因为,我重新建项目,把代码复制过去,又可以通过了。。。
    2009年12月25日 12:40