今天出现了一个怪事,我把以前写的一个代码拿出来编辑,这个代码本身是可以正常编译通过的。
我添加了一个对话框,并添加了类,这个时候问题来了,在除了编译器自动添加的代码,而没有其他新添加的代码的情况下,编译器提示"未声明的标识符",指向的就是刚才添加的对话框的IDD,并且这个错误提示有2条,都是一样的。我查了半天,发现右键选择IDD是可以查到他的定义的,真是叫人纳闷。
说实话,我写程序也有几年了,虽谈不上熟练,但是添加一个对话框,然后添加它的类进行操作,我还是知道怎么做的,应该不会出错,而且即便我有犯错误的可能,但是刚才那些操作所产生的代码,都是编译器自动生成的,我也没有加任何新代码进去,却出现这样让人奇怪的问题。
后来我在网上查了查,有人支招说把resource.h包含到那个对话框的类的头文件里去,这样倒是不出问题了,也能编译通过了,但这恰恰让我不知道为什么了,因为照理说不用这样做啊,这些资源ID在编译时,都会在预编译头里分配到位的啊。
各位朋友有没有碰到这样奇怪的问题啊?或者,有没有高手知道问题所在啊?

解决方案 »

  1.   

    ID都是在resource.h中定义的,一般情况vs生成的都会在相应的地方包含resource.h这个文件,问题就在你添加类的地方,不知道你是怎么添加的,不过没关系,只有包含了resource.h文件就ok了
      

  2.   

    这个问题我也时常出现,都习惯了,直接加resource.h
      

  3.   

    这么说吧,我添加对话框也好,添加对话框的类也好,都是用向导添加的。
    我碰到的问题过程可以这样描述:
    新建一个MFC应用程序,添加一个对话框,添加它的类,然后运行,然后就出错了。
    照理说,这期间我没有人为添加其他的代码,应该不会提示任何错误,但是编译器却提示"未声明的标识符",指向的就是刚才那个对话框的IDD。
    这就叫我百思不得其解了,后来我把resource.h手工的包含到刚才那个新建的对话框的类的头文件里,就OK 了。
    但是按照我的经验,这个resource.h是不用如此添加的,因为每新添加一个类,向导就会自动添加应用程序的主头文件到新的类的源文件里去,而主头文件又包含项目特定的头文件,其中就包括 Resource.h,所以每个类都能找到ID资源的定义。
    问题怪就怪在我非得把resource.h再在那个对话框类的头文件里包含一下,编译器才找得到它的定义。
    难道是我的vs.net2003出问题了?
      

  4.   

    Rebuild 无用。算了,不在这个问题上死磕了,说不定就是编译器出了毛病。