공부/문제해결

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