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;
}
'공부 > 문제해결' 카테고리의 다른 글
LNK2019 오류 - template사용 (0) | 2022.10.08 |
---|---|
디스코드 실행 후 바로 꺼지는 문제 - StarPlayer (0) | 2022.09.03 |
[UE4] SetTimer() 사용시 주의할 점? (0) | 2022.08.16 |
Visual Studio 디버깅이 느려지는 현상 (0) | 2022.08.13 |
LNK2001 오류 - 클래스 내 static 변수 (0) | 2022.05.27 |