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