0

다음 코드는 Visual Studio 2008에서 컴파일되지 않습니다. Foo1 클래스가 Bar로 변환되는 단항 연산자를 허용하려면 어떻게해야합니까?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

당신은 돈 ' 'struct Bar'가 필요합니다. C++의 구조체는 이미 타입입니다. – Puppy

+0

Bar의 정의가 나중에 나타나지 않기 때문에 struct bar를 forward 선언으로 사용하고 있습니다. – camomilk

답변

0

나는 대답을 알아 냈다.

struct Bar; 

class Foo1 
{ 
public: 
    int val; 

    operator struct Bar() const; 
}; 

또는 : 두 가지 솔루션입니다

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

    operator MyBar() const; 
}; 

(운영자는 : 바() 구현이 변경되지 않습니다)

+0

이것은 C++과 같은 솔루션이 아닌 컴파일러 버그의 해결 방법과 비슷합니다. –

+0

네, 아마도 옳은 것 같습니다. 나는 경우에 대비해 태그를 추가 할 것이다. – camomilk

2

은 또는 당신은 할 수 :

//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; 
}