【发布时间】:2018-07-09 03:47:32
【问题描述】:
这是我的代码:
#include <iostream>
#include <string>
class Human
{
public:
std::string * name = new std::string();
void introduce();
};
void Human::introduce()
{
std::cout << "Hello, my name is " << Human::name << std::endl;
}
int main()
{
Human * martha;
martha->name = new std::string("Martha");
martha->introduce();
return 0;
}
嗯,它应该打印出如下消息: “你好,我的名字是玛莎”,但它既不打印“你好,我的名字是”字符串,也不打印“玛莎”的名字。为什么会发生?
【问题讨论】:
-
martha->name通过访问未初始化的变量martha表现出未定义的行为。您的程序永远不会创建Human的实例。你为什么在任何地方都使用指针? C++ 不是 Java。 -
请打开并且不要忽略您的编译器警告。它应该告诉您至少在定义之前使用了
martha。 -
我在学习COCOS2D-X,模板里面的指针太多了,看不懂。归根结底,我想了解它们。
-
@jafactor 你应该错过了 Ken Y-N 评论中的“开启”部分。
-
@jafactor 我正在学习 COCOS2D-X,模板中有很多我看不懂的指针 -- SDK 和 API 适用于那些已经在 API/SDK 所针对的语言方面有经验。它不是用来学习 C++ 基础的。