Sdílet prostřednictvím


Chyba kompilátoru C2259

'class' : nemůže vytvořit instanci abstraktní třídy

Poznámky

Kód deklaruje instanci abstraktní třídy nebo struktury.

Nejde vytvořit instanci třídy nebo struktury s jednou nebo více čistě virtuálními funkcemi. Chcete-li vytvořit objekty odvozené třídy, musí odvozená třída přepsat všechny čistě virtuální funkce.

Další informace naleznete v tématu Implicitně abstraktní třídy.

Examples

Následující příklad vygeneruje 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()

Kdykoli odvozujete z rozhraní a implementujete metody rozhraní v odvozené třídě s jinými přístupovými oprávněními než public, můžete obdržet C2259. K této chybě dochází, protože kompilátor očekává, že metody rozhraní implementované v odvozené třídě mají public přístup.

Pokud chcete tento problém vyřešit, nepoužívejte více omezující přístupová oprávnění pro metody implementace. Kompilátor je nepovažuje za implementace metod rozhraní definovaných v rozhraní. To zase dělá odvozenou třídu abstraktní třídou. Místo toho u implementovaných metod nastavte přístupová oprávnění public .

K C2259 může také dojít kvůli práci v souladu, která byla provedena v sadě Visual Studio 2005, /Zc:wchar_t je nyní ve výchozím nastavení zapnutá. V této situaci lze C2599 vyřešit buď kompilováním /Zc:wchar_t-, získat chování z předchozích verzí, nebo nejlépe aktualizací typů tak, aby byly kompatibilní. Další informace najdete v tématu /Zc:wchar_t (wchar_t Je nativní typ).

Následující příklad vygeneruje 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;

Následující příklad vygeneruje 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
}