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

时间:2011-03-23 15:06:20

标签: 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(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;
}

当我跑步时,它有一些错误: 调用纯虚方法 - 在没有活动异常的情况下调用终止 - 已中止 我可以误解任何人吗? 谢谢

4 个答案:

答案 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;
}
相关问题