C++ 错误:调用纯虚拟方法-在没有活动异常的情况下调用终止-中止
在我的A.h文件中:C++ 错误:调用纯虚拟方法-在没有活动异常的情况下调用终止-中止,c++,C++,在我的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(fa
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";
}
#include "Functions.h"
#include "A.h"
#include "B.h"
using namespace std;
void Functions::run (A *a){
a->execute();
}
#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;
}
在my Functions.cpp文件中:
#include <iostream>
#include "B.h"
void B::execute (unsigned short PC){
cout << "Run";
}
#include "Functions.h"
#include "A.h"
#include "B.h"
using namespace std;
void Functions::run (A *a){
a->execute();
}
#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;
}
在my Main.cpp文件中:
#include <iostream>
#include "B.h"
void B::execute (unsigned short PC){
cout << "Run";
}
#include "Functions.h"
#include "A.h"
#include "B.h"
using namespace std;
void Functions::run (A *a){
a->execute();
}
#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;
}
当我运行时,它有一些错误:
调用纯虚拟方法-在没有活动异常的情况下终止调用-中止
谁能告诉我我误解了什么?
谢谢你我不知道你在做什么,但这基本上就是你向我们展示的,除了简化和实际编译之外,运行起来没有任何问题:
#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;
}
#包括
甲级
{
公众:
虚拟~A(){}
虚空执行()=0;
};
B类:公共A
{
公众:
virtual void execute(){std::cout您编写的B()构造函数没有parantase,加上您有两个B()默认构造函数,加上其中一个是virtual(不好),再加上当您执行a->execute时,您需要带参数的parantase,因为它是一个函数:
试试这个:
#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;
}
#包括
使用名称空间std;
甲级{
私人:
无符号短PC;
公众:
A():PC(0){}
虚拟~A(){}
虚空执行(无符号短PC)=0;
};
B类:公共A{
私人:
智力状态;
bool-exe;
公众:
B():状态(0),exe(false){
//虚拟B(){}
无效执行(未签名的短PC);
};
void B::execute(未签名的短PC){
不能执行(1);
}
int main(int参数,字符**argv){
A*A;
B B;
a=&b;
功能f;
f、 运行(a);
返回1;
}
从构造函数或析构函数调用虚函数时,通常会出现此错误。
检查并确认情况并非如此
(我假设您的演示代码不完整)
您可以这样做:
int main(int args, char**argv){
A *a = new B;
//B b;
//a = &b;
Functions f;
f.run(a);
return 1;
}
该代码存在大量错误,导致无法编译。这意味着不是代码导致问题,而是试图模拟与代码相似的东西导致问题。这意味着模拟(即使所有错误都已修复)可能不会导致您的问题。事实上,它看起来不会导致您看到的问题。如果您要发布模拟代码,请先测试该代码,以确保其导致的问题与原始代码相同。若要获得好的答案,请发布实际的代码或代码片段sense@MariusBancila:发布运行时问题的代码段只在少数情况下有用。真正需要的是演示问题的实际可编译代码。当然,我不会对此提出异议。但即使是代码片段实际上也比有许多明显错误的代码好。我在我的comp上执行,并且我没有收到错误,它会打印:“Run”。void Functions::Run(A*A){A->execute(1);}1?您要求的是usigned short,所以我只是将1放入compileah,抱歉,我仍然不知道为什么它在我的计算机上不工作。一切都是一样的。调用纯虚拟方法terminate时没有激活异常,已中止与开始时相同的错误:(@user552279:应该可以,如果复制粘贴示例,代码是good@user552279:您使用的是什么平台和编译器?或者在对象销毁时调用方法。请阅读:谢谢,我从构造函数调用了一个函数,然后该函数调用了一个虚拟函数。好的,这是一个问题,因为您仍然可以在进程中当您想要调用虚拟函数时,为基类创建一个对象的方法,该函数应该为派生类的不存在的对象调用。