Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
"class" : kan inte instansiera abstrakt klass
Anmärkningar
Kod deklarerar en instans av en abstrakt klass eller struktur.
Du kan inte instansiera en klass eller struktur med en eller flera rena virtuella funktioner. Om du vill instansiera objekt i en härledd klass måste den härledda klassen åsidosätta varje ren virtuell funktion.
Mer information finns i Implicit abstrakta klasser.
Examples
I följande exempel genereras 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()
När du härleder från ett gränssnitt och implementerar gränssnittsmetoderna i den härledda klassen med andra åtkomstbehörigheter än public, kan du få C2259. Felet uppstår eftersom kompilatorn förväntar sig att gränssnittsmetoderna som implementeras i den härledda klassen ska ha public åtkomst.
Lös problemet genom att inte använda mer restriktiva åtkomstbehörigheter för implementeringsmetoderna. Kompilatorn betraktar dem inte som implementeringar för de gränssnittsmetoder som definieras i gränssnittet. Det gör i sin tur den härledda klassen till en abstrakt klass. Gör i stället åtkomstbehörigheterna public för de implementerade metoderna.
C2259 kan också inträffa på grund av att överensstämmelsearbetet som utfördes i Visual Studio 2005 /Zc:wchar_t nu är aktiverat som standard. I den här situationen kan C2599 lösas genom att antingen kompilera med /Zc:wchar_t-, för att hämta beteendet från tidigare versioner, eller helst genom att uppdatera dina typer så att de är kompatibla. För mer information, se /Zc:wchar_t (wchar_t är ursprunglig typ).
I följande exempel genereras 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;
I följande exempel genereras 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
}