【发布时间】:2017-04-26 14:33:47
【问题描述】:
我有一个抽象类:class Abstract_class {..};
还有一个来自派生类的对象:Derived_class Ob;
还有:string name;map<string,Abstract_class*>mp;
如何正确地做这样的事情:mp[name]=&Ob;?
编辑:这是一个例子
Abstract_class {..};
int main(){
map<string,Abstract_class*>mp;
for(int i=0;i<n;i++){
int a,b,c; cin>>a>>b>>c;
Derived_class Ob(a,b,c);
string name; cin>>name;
mp[name]=&Ob;
}
string s; cin>>s;
Abstract_class* ptr=mp[s];
ptr->Print(); // segmentation fault (core dumped)
//Note: Print() is virtual function.
}
【问题讨论】:
-
究竟是什么不起作用?
-
只是问正确与否?我没有任何编译错误,但是在调用像这样的任何纯虚函数时出现“分段错误(核心转储)”: Abstract_class* ptr=mp["...."]; ptr->func();
-
请发布一个最小的完整示例(我们可以编译的 1 文件、10 行程序)以显示错误
-
@Abdulkader 我没有说在这里复制你的程序。我说你应该发布一个小程序来展示你正在谈论的特定行为。请点击此链接:stackoverflow.com/help/mcve
-
正如@RichardHodges 所建议的,与其用散文描述你的代码,不如准备并展示an MCVE。你现在想让我给你一些建议,考虑到你的代码细节——我看不到的代码。盲人能提供的帮助只有这么多。
标签: c++ pointers reference stl abstract-class