컴파일러 오류 C2259
'class': 추상 클래스를 인스턴스화할 수 없습니다.
코드는 추상 클래스 또는 구조체의 인스턴스를 선언합니다.
하나 이상의 순수 가상 함수를 사용하여 클래스 또는 구조를 인스턴스화할 수 없습니다. 파생 클래스의 개체를 인스턴스화하려면 파생 클래스가 각 순수 가상 함수를 재정의해야 합니다.
자세한 내용은 암시적으로 추상 클래스를 참조 하세요.
다음 샘플에서는 C2259를 생성합니다.
// C2259.cpp
// compile with: /c
class V {
public:
void virtual func() = 0;
};
class A : public V {};
class B : public V {
public:
void func();
};
V v; // C2259, V is an abstract class
A a; // C2259, A inherits func() as pure virtual
B b; // OK, B defines func()
인터페이스에서 파생되고 액세스 권한이 다른 public
파생 클래스에서 인터페이스 메서드를 구현할 때마다 C2259를 받을 수 있습니다. 컴파일러에서 파생 클래스에 구현된 인터페이스 메서드에 액세스 권한이 있어야 하므로 public
오류가 발생합니다.
이 문제를 해결하려면 구현 방법에 대해 더 제한적인 액세스 권한을 사용하지 마세요. 컴파일러는 인터페이스에 정의된 인터페이스 메서드에 대한 구현으로 간주하지 않습니다. 따라서 파생 클래스를 추상 클래스로 만듭니다. 대신 구현된 메서드에 대한 액세스 권한을 public
만듭니다.
Visual Studio 2005에서 수행된 규칙 작업으로 인해 C2259 /Zc:wchar_t
가 발생할 수도 있습니다. 이 경우 C2599는 이전 버전에서 동작을 가져오기 위해 컴파일하거나 /Zc:wchar_t-
호환되도록 형식을 업데이트하여 해결할 수 있습니다. 자세한 내용은 (wchar_t 네이티브 형식)을 참조 /Zc:wchar_t
하세요.
다음 샘플에서는 C2259를 생성합니다.
// C2259b.cpp
// compile with: /c
#include <windows.h>
class MyClass {
public:
// WCHAR now typedef'ed to wchar_t
virtual void func(WCHAR*) = 0;
};
class MyClass2 : MyClass {
public:
void func(unsigned short*);
};
MyClass2 x; // C2259
// OK
class MyClass3 {
public:
virtual void func(WCHAR*) = 0;
virtual void func2(wchar_t*) = 0;
virtual void func3(unsigned short*) = 0;
};
class MyClass4 : MyClass3 {
public:
void func(WCHAR*) {}
void func2(wchar_t*) {}
void func3(unsigned short*) {}
};
MyClass4 y;
다음 샘플에서는 C2259를 생성합니다.
// C2259c.cpp
// compile with: /clr
interface class MyInterface {
void MyMethod();
};
ref class MyDerivedClass: public MyInterface {
private:
// Uncomment the following line to resolve.
// public:
virtual void MyMethod(){}
};
int main() {
MyDerivedClass^ instance = gcnew MyDerivedClass; // C2259
}