C++ 错误:调用纯虚拟方法-在没有活动异常的情况下调用终止-中止

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

在我的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";
}
#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:您使用的是什么平台和编译器?或者在对象销毁时调用方法。请阅读:谢谢,我从构造函数调用了一个函数,然后该函数调用了一个虚拟函数。好的,这是一个问题,因为您仍然可以在进程中当您想要调用虚拟函数时,为基类创建一个对象的方法,该函数应该为派生类的不存在的对象调用。