【发布时间】:2015-04-05 07:54:07
【问题描述】:
我得到了这个代码:
#include <iostream>
#include <string>
using namespace std;
struct Base {
Base(string name) {
this->name = name;
}
string name;
};
struct Derived: Base {
string name2;
};
template <typename T>
T createNode(string name) {
Base* node = new Base(name);
return static_cast<T>(node);
}
int main() {
Derived* node = createNode<Derived*>("hej");
node->name2 = "bajs";
cout << node->name2;
}
node->name2 = "bajs"; 行会导致(随机)分段错误。我只是想知道如何纠正此问题以免导致分段错误。我仍然想调用createNode() 来创建基础节点并在之后设置所有属性成员。在c++可以吗?
【问题讨论】:
-
为什么要这样混合模板和继承?如果
createNode是一个模板,那么你不应该在其中创建一个new Base。如果你想继承删除模板并让方法返回Base -
很难理解为什么派生类有
string name2;。另外我认为createNode应该在声明Base* node = new Base(name);中使用T而不是Base -
您不能只将指向基础对象的指针大小写为指向派生类型的指针并期望它能够工作。指向的对象仍然是
Base。它没有name2成员。 -
我想重读 C++ 教科书是当务之急
-
在节目中说“便便”真是太有趣了,太棒了,真的很成熟。
标签: c++