0

Der folgende Code wird nicht in Visual Studio 2008 kompiliert. Wie bekomme ich es, einen unären Operator in der Foo1-Klasse zu ermöglichen, die es in einen Balken konvertiert, wenn Foo1 vor Bar definiert ist?Wie implementiere ich eine unäre Operatorüberladung für einen vorwärts deklarierten Typ in C++?

class Foo1 
{ 
public: 
    int val; 

    operator struct Bar() const; 
}; 

struct Bar 
{ 
    int val; 
}; 

// This does not compile 
Foo1::operator Bar() const 
{ 
    Bar x; 
    x.val = val; 
    return x; 
} 
+0

Sie don‘ t brauchen 'struct Bar', C++ 's Strukturen sind bereits Typen. – Puppy

+0

Ich verwende struct Bar als eine Forward-Deklaration, da die Definition von Bar erst später erscheint. – camomilk

Antwort

0

Ich fand die Antwort. Es gibt zwei Lösungen:

struct Bar; 

class Foo1 
{ 
public: 
    int val; 

    operator struct Bar() const; 
}; 

Oder:

class Foo1 
{ 
    typedef struct Bar MyBar; 
public: 
    int val; 

    operator MyBar() const; 
}; 

(Operator :: Bar() Umsetzung bleibt unverändert)

+0

Es sieht nicht wie eine Lösung in C++ aus, sondern eher als Workaround für einen Compilerfehler. –

+0

Ja, wahrscheinlich hast du recht. Ich werde nur für den Fall ein Tag hinzufügen. – camomilk

2

Oder Sie könnten:

//forward declaration of Bar 
struct Bar; 

class Foo1 
{ 
public: 
    int val; 

    operator Bar() const; 
}; 

struct Bar 
{ 
    int val; 
}; 

//Now it should compile 
Foo1::operator Bar() const 
{ 
    Bar x; 
    x.val = val; 
    return x; 
}