【发布时间】:2020-09-26 17:46:01
【问题描述】:
我试图重写一个函数,但最终出现分段错误。我遵循了一些教程,但现在我无法找到分段错误的根源。
我使用 1 个标头和 1 个 cpp 文件。 更新原因是我想制作多个命令,例如打印并实例化不同的命令并调用 Execute 方法,而不知道这是什么命令。
这是在一个头文件中声明的:
class Command{
public:
virtual int Execute(std::stack<NumericData>* stack)=0;
};
class Print : public Command{
public:
int Execute(std::stack<NumericData>* stack);
};
这是实现的一个cpp文件:
... // inside some function
std::stack<NumericData> stack;
Command* command;
if(1){ // if is updated
Print print; // and reason for seg fault
command=&print; // without if it works
}
command->Execute(&stack); // <- segmentation fault
...
int Command::Execute(std::stack<NumericData>* stack){
printf("Execute parent\n");
return 0;
}
int Print::Execute(std::stack<NumericData>* stack){
printf("Execute child\n");
return 1;
}
【问题讨论】:
-
如果
Command::Execute是纯虚拟的,你为什么要定义它? -
@cigien ,我想要从 Command 类继承的多个命令并实现不同的执行功能,这样我就可以有不同的命令,我不需要确切知道我可以使用哪个命令执行方法执行命令
-
请将此信息添加到问题中,并查看@churill 关于制作 mre 的评论。
-
在mre上工作
标签: c++ overriding header-files virtual