在我的A.h文件中:
class A{
private:
unsigned short PC;
public:
A():PC(0){}
virtual ~A(){}
virtual void execute(unsigned short PC)=0;
};
在我的B.h文件中:
class B:public A{
private:
int status;bool exe;
public:
B:status(0),exe(false){}
virtual B(){}
void execute (unsigned short PC);
};
在我的B.cpp文件中:
#include <iostream>
#include "B.h"
void B::execute (unsigned short PC){
cout << "Run";
}
在我的Functions.h文件中:
#include "A.h"
class Functions{
public:
int status;
Functions():status(1){} // this is a constructer
void run(A *a);
};
在我的Functions.cpp文件中:
#include "Functions.h"
#include "A.h"
#include "B.h"
using namespace std;
void Functions::run (A *a){
a->execute();
}
在我的Main.cpp文件中:
#include "A.h"
#include "B.h"
int main(int args, char**argv){
A *a;
B b;
a = &b;
Functions f;
f.run(a);
return 1;
}
当我跑步时,它有一些错误: 调用纯虚方法 - 在没有活动异常的情况下调用终止 - 已中止 我可以误解任何人吗? 谢谢
答案 0 :(得分:13)
通常从构造函数或析构函数调用虚函数时会出现此错误。 检查情况并非如此。
(我假设你的演示代码不完整)。
答案 1 :(得分:1)
不知道你在做什么但这个,这基本上是你向我们展示的,除了简化和实际编译,运行没有任何问题:
#include <iostream>
class A
{
public:
virtual ~A() {}
virtual void execute() = 0;
};
class B: public A
{
public:
virtual void execute() {std::cout << "B::execute" << std::endl;}
};
void execute(A* a)
{
a->execute();
}
int main()
{
A* a;
B b;
a = &b;
execute(a);
return 0;
}
答案 2 :(得分:0)
你写了没有paranthesis的B()构造函数,加上你有2个B()默认构造函数,加上其中一个是虚拟的(不好),再加上当执行a-&gt; execute时,你需要再次使用参数进行paranthesis ,因为它是一个功能:
试试这个:
#include <iostream>
using namespace std;
class A{
private:
unsigned short PC;
public:
A():PC(0){}
virtual ~A(){}
virtual void execute(unsigned short PC)=0;
};
class B:public A{
private:
int status;
bool exe;
public:
B():status(0),exe(false){}
//virtual B(){}
void execute (unsigned short PC);
};
void B::execute (unsigned short PC){
cout << "Run";
}
class Functions{
public: int status;
Functions():status(1){} // this is a constructer
void run(A *a);
};
void Functions::run (A *a){
a->execute(1);
}
int main(int args, char**argv){
A *a;
B b;
a = &b;
Functions f;
f.run(a);
return 1;
}
答案 3 :(得分:0)
int main(int args, char**argv){
A *a;
B b; // wrong
a = &b; // wrong
Functions f;
f.run(a);
return 1;
}
你可以这样做:
int main(int args, char**argv){
A *a = new B;
//B b;
//a = &b;
Functions f;
f.run(a);
return 1;
}