请问如何得到 类名称/变量名称???

corn8888 2010-01-31 11:26:16
比如,我定义了一个类Class MyClass{...}

然后
MyClass test;

请问我如何得到类名称“test”???
...全文
440 57 打赏 收藏 转发到动态 举报
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
Conry 2010-02-02
  • 打赏
  • 举报
回复
.h文件里面应该放声明,定义都应该在cpp文件
gamedragon 2010-02-02
  • 打赏
  • 举报
回复

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();
}

你是象上面这么用的吗?
corn8888 2010-02-02
  • 打赏
  • 举报
回复
#define MYCLASS(var) MyClass var(#var)

MYCLASS(test);

还是不行,error C2059: 语法错误 : “字符串”
gamedragon 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 corn8888 的回复:]
我的宏定义:
#define MYCLASS(var) MyClass var(#var)
[/Quote]
用的时候应该是
MYCLASS(test);
而不是
MyClass test;
yaozhiyong110 2010-02-02
  • 打赏
  • 举报
回复
把你的变量放进 map<CString,MyClass *> 就可以啦 怎么输出就看你自己的喜好了
Torch009 2010-02-02
  • 打赏
  • 举报
回复
在使用前加上:extern MyClass test;
oldmanzhao 2010-02-02
  • 打赏
  • 举报
回复
用C++自己的RTTI不就可以吗。
gamedragon 2010-02-02
  • 打赏
  • 举报
回复
给LZ介绍一下.h文件在编译时候是怎么做的吧,了解一下.h到底是个什么东西。

.h文件都是通过#include放进.cpp里的,#include这个指令跟#define一样,都是给预编译器用的。预编译器发现#include之后,就把后面指定的文件整个拿进来(不管是.h还是.cpp,还是其他什么文件,随便你写),把.h和.cpp合成一个文件,再把这个文件交给编译器编译。编译器看到的只有一个文件。

所以不管你的宏还是其他什么定义放在.h里还是.cpp里,只要合成后的文件一样,编译器看上去就一样。

PS:你甚至可以把一个函数体分开写在两个文件里,然后把这两个文件#include到一起,编译一样没问题,不过就是吃饱了撑的才会这么干就是了。
corn8888 2010-02-02
  • 打赏
  • 举报
回复
请问应该怎么用?
gamedragon 2010-02-02
  • 打赏
  • 举报
回复
行不行,要看你的.h是怎么用的。
corn8888 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 51 楼 gamedragon 的回复:]
C/C++ codeclass A {public: A(constchar*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();
}
你是象上面这么用的吗?
[/Quote]

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

好像在.h文件中不行
vercitti 2010-02-01
  • 打赏
  • 举报
回复
给类添加一个字符串member

声明test的时候顺便给字符串赋值...

虽然不明白为什么要这样搞
corn8888 2010-02-01
  • 打赏
  • 举报
回复
在.h文件中

MyClass ttt("123");

提示有错误
maple_zhj 2010-02-01
  • 打赏
  • 举报
回复
构造时,传一个 跟 变量名,相一致的 字符串 进去。
corn8888 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 jingzhongrong 的回复:]
在类里面添加一个保存类变量名称的变量,然后使用构造函数进行赋值
C/C++ codeclass A
{char var_name[50];public:
A(char*var)
{
strcpy(var_name,var);
}
}
[/Quote]

我需要在.h文件中声明对象...
jingzhongrong 2010-02-01
  • 打赏
  • 举报
回复
在类里面添加一个保存类变量名称的变量,然后使用构造函数进行赋值
class A
{
char var_name[50];
public:
A(char *var)
{
strcpy(var_name,var);
}
}
corn8888 2010-02-01
  • 打赏
  • 举报
回复
各位,各位,你们的建议我都试了,还是不行啊,

你们能不能建立一个项目,实际试试,我想要比讲来讲去好得多

建个简单的项目,添加几行代码,很简单的...
corn8888 2010-02-01
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 gamedragon 的回复:]
MyClass:MyClass(const char *szName)
[/Quote]


不行啊
Joephia 2010-02-01
  • 打赏
  • 举报
回复
补充
MyClass.cpp
MyClass::MyClass(LPCTSTR szName)
{
m_szName=szName;
}

MyClass::~MyClass()
{

}


Joephia 2010-02-01
  • 打赏
  • 举报
回复
MyClass.h
class MyClass
{
public:
MyClass(LPCTSTR szName);
virtual ~MyClass();
CString m_szName;

};

#define MYCLASS(var) MyClass var(#var);\
MessageBox(##var.m_szName)


DKDlg.cpp
void CDkDlg::OnOK()
{
MYCLASS(test);
}
加载更多回复(36)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧