Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
'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
}