Error: pure virtual method called - call termination without active exception - canceled

In my Ah file:

class A{
private:
unsigned short PC;
public:
A():PC(0){}
virtual ~A(){}
virtual void execute(unsigned short PC)=0;
};

In my Bh file:

class B:public A{
private: int status;bool exe;
public:
B:status(0),exe(false){}
virtual B(){}
void execute (unsigned short PC);
};

In my B.cpp file:

#include <iostream>
#include "B.h" 
void B::execute (unsigned short PC){
cout << "Run";
}

In functions.h file:

#include "A.h"
class unctions{
public: int status;
Functions():status(1){} // this is a constructer
void run(A *a);
};

In my functions.cpp file:

#include "Functions.h"
#include "A.h"
#include "B.h"

using namespace std;
void Functions::run (A *a){
a->execute;
}

In my Main.cpp file:

#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;
}

When I run, it has some error: "a pure virtual method called - terminating a call without an active exception -" Aborted ", Can someone where I misunderstood? Thank you

+5
source share
4 answers

Usually you get this error when calling your virtual function from a constructor or destructor. Make sure this is not the case.

(I assume your demo code is not complete).

+9
source

, , , , , , , , :

#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;
}
+1

B() paranthesis, B(), ( ), a- > 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;
}
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;
}
0

All Articles