friend 함수가 다음과 같은 사용자 지정 반환 형식을 사용하지 않는 한 전역 네임 스페이스에서 클래스의 friend 함수를 만들고 싶습니다.사용자 지정 반환 형식을 사용하는 글로벌 네임 스페이스의 friend 함수
int
만약
typedef int Type;
Type myFunction();
namespace foo {
class Foo
{
public:
friend Type ::myFunction();
private:
void bar() {}
};
}
Type myFunction()
{
foo::Foo a;
a.bar();
return 0;
}
대신 코드를 컴파일 Type
의 사용되지만, typedef
와 컴파일러는 네임 스페이스의 유형을 구분하지 않는 것, 에러 제공 :
error: expected a class or namespace
friend Type ::myFunction();
^
error: C++ requires a type specifier for all declarations
friend Type ::myFunction();
나는 그 소리 ++ 500을 사용하고 있습니다를 . 2.79 on OS X. 예를 들어 typedef
대신 #define
을 사용할 수 있지만 실제 문제는 변경할 수없는 다른 헤더 파일에서 사용자 지정 유형이 나옵니다. 도움이 될 것입니다.
최소한 Ideone (GCC) (http://ideone.com/5wLR5y)에서 컴파일하십시오. 정말 [clang 특정 문제] (http://coliru.stacked-crooked.com/a/2d7ccf99e0ca5d1b) 인 것 같습니다. –
gcc 4.9.2-6에서 나와 같은 문제가 발생했습니다. awesomeyi의 답변으로 해결되었습니다 .. 버그입니까? – frans