1、在一个工程project1的头文件test1.h中定义了class1,project2的头文件test2中定义了class2,现在编辑了一个名为use.h的头文件如下:
#ifndef USE
#define USE#ifndef USE_CLASS1
#include <test1.h>
#endif #ifndef USE_CLASS2
#include <test2.h>
#endif

是否在其他工程中只要包含这个use.h文件就可以使用类class1和class2?为什么要这样定义(比如为什么用USE_CLASS1这种形式)?2、我在工程的stdafx.h文件中定义了一个枚举类型
enum test
{
         DEFAULT = 0,
NAME  = 1,
TIME    = 2,
};
然后在工程的CMyView类的头文件MyView.h中定义一个函数,具有test类型的返回值,
test GetTest();
我并没有给出test类型的定义,编译时也不会报错,为什么?
反之,如果我创建一个对话框,并在对话框中使用这个枚举类型就会报错,这时候应该怎么办才能够让系统认到变量定义?(似乎不能直接在头文件中包括stdafx.h文件)谢谢!

解决方案 »

  1.   

    1.可以用,不过USE_CLASS1语句最好放在test1.h里边,同时放在use.h也可以,可提高编译效率。USE_CLASS1用来避免多次声明一类。2.声明放在stdafx.h中可以在任何地方有效,包括头文件,如果出错,检查一下你是否编译过stdafx.cpp,或者定义的类型是否重名。
      

  2.   

    这样的问题很基础:
    首先第一个问题:是的,其他的文件只要包含了use.h就可以用class1和class2.
     为什么用USE_CLASS2和USE_CLASS1是:基础点讲,你的程序可能很大,可能在好几个实现文件里面都有包含use.h,那么,这样就存在一个问题,是class1和class2会被定义多次(因为头文件被包含了多次),定义了USE_CLASS2和USE_CLASS1就是防止这样做的。 
    2:你要在对话框的实现文件里面也要包括stdafx.h才行啊。包括了这个文件,编译器才知到你的test是什么东西啊!
      

  3.   

    关于第二个问题,stdafx.h中的声明是不需要包含就可以使用吗?
      

  4.   

    但是,我已经在实现文件中包含了stdafx.h,仍然提示有错误,是在对话框的头文件中,因为在对话框头文件中定义了返回值为枚举类型test的函数。问题可能在什么地方?