2017-11-13 3 views
0

in DefinitionC++ C2509 in der Definition von Instruktor Versuchen Sie es mit: - Fang

A::A() 
try: B() 
{} 
catch(Exception e) {} 

in diesem Code habe ich C2509 Fehler. Wenn ich versuche, zu Definition (F12) in Header-Datei oder (Strg + F12) in Definition gehen, funktioniert es nicht.

Ich versuchte

A::A() 
{ 
try 
{ B();} 
catch(Exception e) {} 
} 

aber das ist unmöglich, weil in der Klasse B gibt es eine rein virtuelle Funktion ist.

Ich bin verwirrt mit dem Unterschied zwischen

try: {} 
catch 

und

try{} 
catch 
+0

weder Fehler Namen noch Verknüpfungen sind universell für C++. Sie müssen die Fehlermeldung in die Frage wörtlich einfügen – user463035818

+0

Ich denke, Sie haben Ihre Frage beantwortet: "Das ist unmöglich, weil in Klasse B gibt es eine reine virtuelle Funktion." Sie können eine abstrakte Klasse nicht instanziieren - einschließlich in Initialisierungslisten. – virgesmith

+0

@virgesmith Vielen Dank für Ihre Antwort, aber warum kann ich die abstrakte Klasse nach 'try:' initialisieren, nicht in try {}? –

Antwort

0

Ich bin jetzt vorausgesetzt A von B. In diesem Fall 1) leiten Sie können explizit initalise ein abstraktes Basisklasse aber 2) müssen Sie es in der Initialisiererliste instanziieren, da es vollständig aufgebaut sein muss vor der Körper von A :: A() ausgeführt wird.

Dies funktioniert für mich:

#include <stdexcept> 

struct B 
{ 
    B() { } 
    virtual int f() = 0; 
}; 

struct A : B 
{ 
    A() try : B() { } catch(const std::exception&) { } 

    int f() { return 0; } 
}; 

int main() 
{ 
    A a; 
} 

g ++ verwenden 5.4. Ich vermute, dass Ihr Fehler (den Sie nicht angegeben haben) auf ein anderes Problem zurückzuführen ist, z. kein Ableiten von A aus B oder eine Diskrepanz zwischen den virtuellen Funktionsdefinitionen in den beiden Klassen.

+0

Vielen Dank. Wie Sie angenommen haben, leitet sich A von B ab. Tut mir leid, dass ich das nicht gesagt habe. Ich habe herausgefunden, dass ich nicht alle virtuellen Funktionen initialisiert habe. Es hat sehr geholfen. ;) –

Verwandte Themen