第四章SysMets1.c程序老通不过,如下:
--------------------Configuration: SysMets1 - Win32 Debug--------------------
Compiling...
SysMets1.cpp
d:\program files\microsoft visual studio\myprojects\sysmets1\sysmets.h(151) : error C2065: 'SM_MOUSEWHEELPRESENT' : undeclared identifier
d:\program files\microsoft visual studio\myprojects\sysmets1\sysmets.h(153) : error C2065: 'SM_XVIRTUALSCREEN' : undeclared identifier
d:\program files\microsoft visual studio\myprojects\sysmets1\sysmets.h(155) : error C2065: 'SM_YVIRTUALSCREEN' : undeclared identifier
d:\program files\microsoft visual studio\myprojects\sysmets1\sysmets.h(157) : error C2065: 'SM_CXVIRTUALSCREEN' : undeclared identifier
d:\program files\microsoft visual studio\myprojects\sysmets1\sysmets.h(159) : error C2065: 'SM_CYVIRTUALSCREEN' : undeclared identifier
d:\program files\microsoft visual studio\myprojects\sysmets1\sysmets.h(161) : error C2065: 'SM_CMONITORS' : undeclared identifier
d:\program files\microsoft visual studio\myprojects\sysmets1\sysmets.h(163) : error C2065: 'SM_SAMEDISPLAYFORMAT' : undeclared identifier
d:\program files\microsoft visual studio\myprojects\sysmets1\sysmets1.cpp(95) : error C2065: 'sysmtrics' : undeclared identifier
d:\program files\microsoft visual studio\myprojects\sysmets1\sysmets1.cpp(95) : error C2109: subscript requires array or pointer type
d:\program files\microsoft visual studio\myprojects\sysmets1\sysmets1.cpp(95) : error C2228: left of '.szLabel' must have class/struct/union type
执行 cl.exe 时出错.SysMets1.exe - 1 error(s), 0 warning(s)
我定位,是以下代码:
    SM_MOUSEWHEELPRESENT,    TEXT ("SM_MOUSEWHEELPRESENT"),     
                              TEXT ("Mouse wheel present flag"),
     SM_XVIRTUALSCREEN,       TEXT ("SM_XVIRTUALSCREEN"),        
                              TEXT ("Virtual screen x origin"),
     SM_YVIRTUALSCREEN,       TEXT ("SM_YVIRTUALSCREEN"),        
                              TEXT ("Virtual screen y origin"),
     SM_CXVIRTUALSCREEN,      TEXT ("SM_CXVIRTUALSCREEN"),       
                              TEXT ("Virtual screen width"),
     SM_CYVIRTUALSCREEN,      TEXT ("SM_CYVIRTUALSCREEN"),       
                              TEXT ("Virtual screen height"),
     SM_CMONITORS,            TEXT ("SM_CMONITORS"),             
                              TEXT ("Number of monitors"),
     SM_SAMEDISPLAYFORMAT,    TEXT ("SM_SAMEDISPLAYFORMAT"),     
                              TEXT ("Same color format flag")

但是我把这几行代码注释起来或者删了,还是报同样的错误!!!求答案!!!

解决方案 »

  1.   

    undeclared identifier  没有定义...
      

  2.   

    SM_MOUSEWHEELPRESENT\SM_XVIRTUALSCREEN 等预定义符号 是GetSystemMetrics()函数用的,
    楼主可以看看MSDN关于函数GetSystemMetrics的说明,用vc6.0能编译通过吗
      

  3.   

    不是头文件的事,而是版本的事.你用的一定是VC6吧。这个是VC6的版本过低,你可以将windows.h中的#define WINVER  0x0400中的0x400改为0x500就行了。 
      

  4.   

    如果你不想改windows.h的话,可以在CPP文件的前面加一句:
    #define WINVER 0x0500 
    就行了,如果你的系统是XP的话,最好写成:#define WINVER 0x0501 
      

  5.   

    这个正解。
    没定义WINDOWS版本吧。
    在源程序头加就行。
      

  6.   

    我用的确实是vc6,win7系统,在cpp中加了“#define WINVER 0x0500”后,就运行成功了,不知道这是怎么一回事,能否给个讲解?
      

  7.   

    我用的确实是vc6,win7系统,在cpp中加了“#define WINVER 0x0500”后,就运行成功了,不知道这是怎么一回事,能否给个讲解?
    =================
    这个其实很简单,你在VC6下面找到windows.h,打开它,看一下就明白了,它里面定义了WINVER 为0x0400,而在SM_MOUSEWHEELPRESENT这些标识符的定义中却是加在WINVER为0x0500下才有效的。