공부/문제해결

C2259:추상클래스를 인스턴스화 할 수 없습니다

_mwmw 2022. 5. 25. 21:51

C2259:추상클래스를 인스턴스화 할 수 없습니다

가끔 가상함수를 사용하다보면 이런 오류를 접할 때가 있다.

 

원인1

가상함수를 선언만 하고 자식 클래스에서 정의하지 않는 경우이다.

모든 자식 클래스에서 해당 가상함수를 정의해주면 된다.

// A.h
class A{
	A();
    virtual void Func() = 0;
}

// A.cpp
A::A(){
	//...
}


// B.h
class B : public A {
	B();
    void Func();
}

// B.cpp
B::B(){
	//...
}

void B::Func(){
	//...
}

자식 클래스에서 정의해주면 된다.

 

원인2

내가 겪은 문제...

vector에 가상함수가 포함된 클래스를 넣고자 할 때 발생할 수 있다.

[...]
#include <vector>
#include "B.h"

int main(){
    B* b = new B();
    
    // 이렇게 쓰면 Error!
    std::vector<B> vec;
    vec.push_back(*b);
    
    // 이렇게 써야함
    std::vector<B*> vec;
    vec.push_back(b);

	return 0;
}