我得到這個代碼:屬性值添加到一個向下鑄結構導致分段錯誤
#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' – ZivS 2015-04-05 07:58:07
很難說明爲什麼派生類有'string name2;'。另外我認爲''createNode''應該在'Base * node = new Base(name)'語句中使用'T'而不是'Base''' – VolAnd 2015-04-05 07:59:04
您不能僅僅指向一個基礎對象來指向派生類型,並期望它工作。指向的對象仍然是一個「基礎」。它沒有'name2'成員。 – juanchopanza 2015-04-05 08:03:36