比如,我定义了一个类Class MyClass{...}然后
 MyClass test;请问我如何得到类名称“test”???

解决方案 »

  1.   

    这个可以这么对应
    MyClass test
         |   |
        int  a;
      

  2.   

    可以把这个声明
    MyClass test
    对应到
    下面的这个声明
    int  a问题就好理解了
    如何得到整形的名称“a”
      

  3.   

    我的目的是显示出哪个变量名称,因为用MyClass声明了多个变量,要知道是那个变量
      

  4.   

    使用 CRuntimeClass 类的 GetRuntimeClass功能CAge a(21);
    CRuntimeClass* prt = a.GetRuntimeClass();
    ASSERT(strcmp(prt->m_lpszClassName, "CAge")  == 0);   
      

  5.   

    类里定义个string,用来保存变量名,初始化的时候把变量名作为字符串传进去就是了。MyClass a("a")用宏简化一下
    #define DELC_MYCLASS(x)    MyClass x(#x)
      

  6.   


    好像得到的是类名称,而不是用类声明的变量名称
    我在.h文件中声明的MyClass test;
    好像.h文件中不可以加参数吧?总之,非常感谢各位的回复,谢谢
      

  7.   

    比如说CMyClass test;我的意思的显示“test”
      

  8.   


    要想得到 MyClass 这个类名到是很简单的,只要支持 CRuntimeClass 就可以了要想得到 test 这个变量名则不是那么简单的,因为 test 只是给我们看的一个符号,程序编译后根本就不存在 test 这个符号,而是变量的地址偏移
      

  9.   

    折中做法:class MyClass{
    public:
        CString m_szName;
        MyClass(LPCTSTR szName){m_szName=szName};
    ....
    };#define MYCLASS(var) MyClass var(#var)MYCLASS(test);
    MessageBox(test.m_szName);
      

  10.   

    我试了,不行啊,具体步骤:1.添加一个类MyClass
    2.在MyClass中添加构造函数
    MyClass::MyClass(int a)
    {
    AfxMessageBox("hello world");
    }3.在.h文件中添加
    #include "MyClass.h"
    #define MyClass(x) MyClass x(#x)MyClass TTT;程序运行的时候,并没有显示MessageBox???是不是这样定义宏不行?
      

  11.   

    把 MyClass::MyClass(int a) 更改为 MyClass:MyClass(LPCTSTR szName) 也不行啊?
      

  12.   


    这个地方错了应该是#define MYCLASS(var) MyClass var(#var) MYCLASS(test); 
    MessageBox(test.m_szName);
      

  13.   


    #define MYCLASS(var) MyClass var(#var) 
    MYCLASS(test);
    我改了,但还是不行,是不是在.h中不行?
      

  14.   

    MyClass:MyClass(const char *szName)
      

  15.   

    在类里面添加一个保存类变量名称的变量,然后使用构造函数进行赋值
    class A
    {
      char var_name[50];
      public:
        A(char *var)
        {
           strcpy(var_name,var);
        }
    }
      

  16.   

    在.h文件中MyClass ttt("123");提示有错误
      

  17.   

    给类添加一个字符串member声明test的时候顺便给字符串赋值...虽然不明白为什么要这样搞
      

  18.   

    java 中反射不知道c++ 有没有
      

  19.   

    怎么个不行法?最简单一个C++文件。class A {
    public:
        A(const char *n) { name = n; }
        void print_name() { cout << name << endl; }
        string name;
    };
    int main()
    {
        A kkk("kkk");
        kkk.print_name();
    }
      

  20.   

    我是在.h中声明类对象的A kkk;用宏定义之后就会有问题
      

  21.   

    我的宏定义:
    #define MYCLASS(var) MyClass var(#var)
      

  22.   

    楼上的一系列我没有仔细看,不过的确可以借鉴一下MFC的动态创建机制。
      

  23.   

    在使用前加上:extern  MyClass test;
      

  24.   

    把你的变量放进 map<CString,MyClass *> 就可以啦 怎么输出就看你自己的喜好了
      

  25.   

    用的时候应该是
    MYCLASS(test);
    而不是
    MyClass test;
      

  26.   

    #define MYCLASS(var) MyClass var(#var)MYCLASS(test);还是不行,error C2059: 语法错误 : “字符串”
      

  27.   


    class A {
        public: A(const char *n) { name = n; }
        void print_name() { cout << name << endl; }
        string name;
    };
    #define MY_A(x)   A x(#x)
    int main()
    {
        MY_A(kkk);
        kkk.print_name();
    }你是象上面这么用的吗?
      

  28.   

    .h文件里面应该放声明,定义都应该在cpp文件
      

  29.   


    不是,我是.h在文件中
    MY_A(kkk);好像在.h文件中不行
      

  30.   

    给LZ介绍一下.h文件在编译时候是怎么做的吧,了解一下.h到底是个什么东西。.h文件都是通过#include放进.cpp里的,#include这个指令跟#define一样,都是给预编译器用的。预编译器发现#include之后,就把后面指定的文件整个拿进来(不管是.h还是.cpp,还是其他什么文件,随便你写),把.h和.cpp合成一个文件,再把这个文件交给编译器编译。编译器看到的只有一个文件。所以不管你的宏还是其他什么定义放在.h里还是.cpp里,只要合成后的文件一样,编译器看上去就一样。PS:你甚至可以把一个函数体分开写在两个文件里,然后把这两个文件#include到一起,编译一样没问题,不过就是吃饱了撑的才会这么干就是了。