【发布时间】:2016-02-19 07:53:37
【问题描述】:
所有,
我仍在学习 C++,但我在一个我正在修补的项目中遇到了一个我很好奇的问题。我注意到,当我尝试打印作为类成员的字符串的内容时,我得到的是内存地址而不是内容。我知道这是因为该项目是一个指针,但我感到困惑的是我使用-> 运算符来尊重它。
为什么我可以在 if 语句中使用 -> 运算符对类成员进行评估以取消引用它,但是当以相同的方式打印到文件字符串时,我却获得了内存地址?
一个例子如下:
假设我有一个名为 pClass 的类,其中有一个名为 m_strEmployeeName 的成员。作为旁注(我不知道这是否重要),m_strEmployeeName 的值是CString 而不是std::string,因此也可能存在一些未知的转换问题。
如果我使用下面的简单代码,我会得到一个内存地址。
std::ofstream file("testfile.text");
file << pClass->m_strEmployeeName;
file.close();
我使用以下解除引用方法得到了相同的行为(我期望这是因为 -> 是同一件事)。
std::ofstream file("testfile.text");
file << (*pClass).m_strEmployeeName;
file.close();
知道我做错了什么吗?
【问题讨论】:
-
问题是
CString而不是您如何引用该成员。只需创建一个CString类型的变量并尝试打印它。 -
只是为了确保,您知道您取消引用
pClass,而不是m_strEmployeeName,对吗?因为在I understand that this is because the item is a pointer, but what I"m confused about is that I am using the -> operator to deference it.这句话中你似乎暗示了其他的意思。 -
我添加了
MFC标签,因为您使用的是CString。CString不是标准 C++ 库的一部分,iostreams 对此一无所知(因此打印了地址)。如果您需要坚持使用CString,ebyrob 的答案将起作用。 -
查看
CString的文档以了解正确的使用方法。
标签: c++ string pointers mfc filestreams