DECLARE_DYNAMIC(class_name)是放在一个类的内部的,实际上是下面写的这样,你觉得是不是应该有个public呢,说明下面的是公有成员嘛。
public:        
static CRuntimeClass class##class_name;        
virtual CRuntimeClass* GetRuntimeClass() const;##的意思是前后实际组成一个字符串,因为class_name是动态的,比如我给他一个MyClass
class##class_name 就表示 classMyClass,我讲明白了吗?

解决方案 »

  1.   

    1. public 意指下列宣示为公开,这个宏是用在类定义里的
    2.  ##是用来连接字符串之用的,由预处理器粘合,譬如如果你宣示 DECLARE_DYNAMIC(MyClass)的话
          
    static CRuntimeClass class##class_name
    就变成
    static CRuntimeClass classMyClass
      

  2.   

    我不是指的##,而是上面第四行的#class_name能解释一下下面的宏是什么含义么??
    #define _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew)        static char _lpsz##class_name[] = #class_name;        CRuntimeClass class_name::class##class_name = {                _lpsz##class_name, sizeof(class_name), wSchema, pfnNew,                        RUNTIME_CLASS(base_class_name), NULL };        static AFX_CLASSINIT _init_##class_name(&class_name::class##class_name);        CRuntimeClass* class_name::GetRuntimeClass() const                { return &class_name::class##class_name; } 有没有一本书详细介绍C++宏的语法,各位大虾,你们当初是怎样征服这些宏的。
      

  3.   

    #class_name把后面的字符串变成显性字符串: 如果你宣示 DECLARE_DYNAMIC(MyClass)的话, static char _lpsz##class_name[] = #class_name; 
     就变成
     static char _lpszMyClass [] = "MyClass";   
      

  4.   

    我靠!你看了《深入浅出MFC》都不知道这些东西是什么啊?真是为候先生感到悲哀啦,不知道是候先生水平太次还是……