请问如何得到 类名称/变量名称??? 比如,我定义了一个类Class MyClass{...}然后 MyClass test;请问我如何得到类名称“test”??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个可以这么对应MyClass test | | int a; 可以把这个声明MyClass test对应到下面的这个声明int a问题就好理解了如何得到整形的名称“a” 我的目的是显示出哪个变量名称,因为用MyClass声明了多个变量,要知道是那个变量 使用 CRuntimeClass 类的 GetRuntimeClass功能CAge a(21);CRuntimeClass* prt = a.GetRuntimeClass();ASSERT(strcmp(prt->m_lpszClassName, "CAge") == 0); 类里定义个string,用来保存变量名,初始化的时候把变量名作为字符串传进去就是了。MyClass a("a")用宏简化一下#define DELC_MYCLASS(x) MyClass x(#x) 好像得到的是类名称,而不是用类声明的变量名称我在.h文件中声明的MyClass test;好像.h文件中不可以加参数吧?总之,非常感谢各位的回复,谢谢 比如说CMyClass test;我的意思的显示“test” 要想得到 MyClass 这个类名到是很简单的,只要支持 CRuntimeClass 就可以了要想得到 test 这个变量名则不是那么简单的,因为 test 只是给我们看的一个符号,程序编译后根本就不存在 test 这个符号,而是变量的地址偏移 折中做法:class MyClass{public: CString m_szName; MyClass(LPCTSTR szName){m_szName=szName};....};#define MYCLASS(var) MyClass var(#var)MYCLASS(test);MessageBox(test.m_szName); 我试了,不行啊,具体步骤:1.添加一个类MyClass2.在MyClass中添加构造函数MyClass::MyClass(int a){AfxMessageBox("hello world");}3.在.h文件中添加#include "MyClass.h"#define MyClass(x) MyClass x(#x)MyClass TTT;程序运行的时候,并没有显示MessageBox???是不是这样定义宏不行? 把 MyClass::MyClass(int a) 更改为 MyClass:MyClass(LPCTSTR szName) 也不行啊? 这个地方错了应该是#define MYCLASS(var) MyClass var(#var) MYCLASS(test); MessageBox(test.m_szName); #define MYCLASS(var) MyClass var(#var) MYCLASS(test);我改了,但还是不行,是不是在.h中不行? MyClass:MyClass(const char *szName) 在类里面添加一个保存类变量名称的变量,然后使用构造函数进行赋值class A{ char var_name[50]; public: A(char *var) { strcpy(var_name,var); }} 在.h文件中MyClass ttt("123");提示有错误 给类添加一个字符串member声明test的时候顺便给字符串赋值...虽然不明白为什么要这样搞 java 中反射不知道c++ 有没有 怎么个不行法?最简单一个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();} 我是在.h中声明类对象的A kkk;用宏定义之后就会有问题 我的宏定义:#define MYCLASS(var) MyClass var(#var) 楼上的一系列我没有仔细看,不过的确可以借鉴一下MFC的动态创建机制。 在使用前加上:extern MyClass test; 把你的变量放进 map<CString,MyClass *> 就可以啦 怎么输出就看你自己的喜好了 用的时候应该是MYCLASS(test);而不是MyClass test; #define MYCLASS(var) MyClass var(#var)MYCLASS(test);还是不行,error C2059: 语法错误 : “字符串” 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();}你是象上面这么用的吗? .h文件里面应该放声明,定义都应该在cpp文件 不是,我是.h在文件中MY_A(kkk);好像在.h文件中不行 给LZ介绍一下.h文件在编译时候是怎么做的吧,了解一下.h到底是个什么东西。.h文件都是通过#include放进.cpp里的,#include这个指令跟#define一样,都是给预编译器用的。预编译器发现#include之后,就把后面指定的文件整个拿进来(不管是.h还是.cpp,还是其他什么文件,随便你写),把.h和.cpp合成一个文件,再把这个文件交给编译器编译。编译器看到的只有一个文件。所以不管你的宏还是其他什么定义放在.h里还是.cpp里,只要合成后的文件一样,编译器看上去就一样。PS:你甚至可以把一个函数体分开写在两个文件里,然后把这两个文件#include到一起,编译一样没问题,不过就是吃饱了撑的才会这么干就是了。 线程不同步问题 很怪的问题: 关于CRecordset::AddNew() TerminateProcess无法结束进程的问题;附代码!!!!!! 100分求msdn6。0下载地址!!! 请看下面两句关于取别的程序的完整路径的代码` 字符串 为什么我的win98中的“internet选项...”栏里的“主页修改项”突然被置灰?重新安装浏览器也不行。。。 那里有汇编语言的编译程序下载?小弟急用 给点意见啊 怎么在自已程序窗口以处的屏幕区域画一条直线? CtabCtrl类为什么没有SetItemDataPtr?? 问个socket的问题。。
MyClass test
| |
int a;
MyClass test
对应到
下面的这个声明
int a问题就好理解了
如何得到整形的名称“a”
CRuntimeClass* prt = a.GetRuntimeClass();
ASSERT(strcmp(prt->m_lpszClassName, "CAge") == 0);
#define DELC_MYCLASS(x) MyClass x(#x)
好像得到的是类名称,而不是用类声明的变量名称
我在.h文件中声明的MyClass test;
好像.h文件中不可以加参数吧?总之,非常感谢各位的回复,谢谢
要想得到 MyClass 这个类名到是很简单的,只要支持 CRuntimeClass 就可以了要想得到 test 这个变量名则不是那么简单的,因为 test 只是给我们看的一个符号,程序编译后根本就不存在 test 这个符号,而是变量的地址偏移
public:
CString m_szName;
MyClass(LPCTSTR szName){m_szName=szName};
....
};#define MYCLASS(var) MyClass var(#var)MYCLASS(test);
MessageBox(test.m_szName);
2.在MyClass中添加构造函数
MyClass::MyClass(int a)
{
AfxMessageBox("hello world");
}3.在.h文件中添加
#include "MyClass.h"
#define MyClass(x) MyClass x(#x)MyClass TTT;程序运行的时候,并没有显示MessageBox???是不是这样定义宏不行?
这个地方错了应该是#define MYCLASS(var) MyClass var(#var) MYCLASS(test);
MessageBox(test.m_szName);
#define MYCLASS(var) MyClass var(#var)
MYCLASS(test);
我改了,但还是不行,是不是在.h中不行?
class A
{
char var_name[50];
public:
A(char *var)
{
strcpy(var_name,var);
}
}
public:
A(const char *n) { name = n; }
void print_name() { cout << name << endl; }
string name;
};
int main()
{
A kkk("kkk");
kkk.print_name();
}
#define MYCLASS(var) MyClass var(#var)
MYCLASS(test);
而不是
MyClass test;
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();
}你是象上面这么用的吗?
不是,我是.h在文件中
MY_A(kkk);好像在.h文件中不行