2014-12-15 3 views
-1
class A { 
    class B { } 
    B somefunction(); 
} 

B A::somefunction() { 
    B bla; 
    return bla; 
} 

그래서이 코드는 내 코드에서 비슷합니다. 그리고 'B' does not name a type이라는 오류 메시지가 나타납니다. 어떤 도움을 주시면 감사하겠습니다. 추신 인터페이스를 변경할 수 없습니다.다른 클래스 내에 정의 된 클래스 유형의 함수 정의

+0

B는 추상화 죄송 A. – Nard

+0

밖에 볼 수 없습니다하지만 내가 일부 개념을 명확히하기 위해 필요한 있도록 과제의 일부이기 때문입니다. 그렇지 않으면 부도덕 한 일이 될 것입니다. 도와 주셔서 감사합니다. – Pure

답변

4

선두 반환 형식은 함수의 범위를 벗어난 해석과 같아야합니다;

A::B A::somefunction() { 

또는 C++ (11), 당신은 (함수 매개 변수 유형 같은) 함수의 범위에서 해석 된 뒤 반환 형식을 사용할 수 있기 때문에, :가 사용 된 경우 그래서 중첩 된 유형을 규정 할 필요가 :

auto A::somefunction() -> B { 
+0

후행 반환 유형을 사용하는 것이 좋았습니다. D – Nard

+1

[ADL]을 참조 할만한 가치가있을 수 있습니다. (http://stackoverflow.com/questions/8111677/what-is-argument-dependent-lookup-aka-adl-or-koenig- 조회)? – matsjoyce

+0

@matsjoyce : 함수가 호출되지 않아 ADL이 없습니다. 첫 번째 예제에서는 정규화 된 조회이고 두 번째 예제에서는 정규화 된 조회 (적합한 범위에서)입니다. –

0

BA으로 범위가 지정되므로 B을 참조하려면 범위 해결 연산자 인 A::B을 사용해야합니다.

따라서 과 같은 정의가 somefunction이어야합니다.

0

B는 A 클래스에 있고 A 네임 스페이스에있는 것처럼 kindof로 동작합니다. 시도 :

class A { 
    class B { } 
    B somefunction(); 
} 

A::B A::somefunction() { 
    B bla; 
    return bla; 
} 
+1

'A'는 _namespace_가 아니며 단지'B'가 중첩 된 클래스입니다. –

0

somefunction() 귀하의 정의는

A::B A::somefunction() { 
    B bla; 
    return bla; 
} 
+0

확실히 틀린 것은 아니지만, 나는 A :가 bla 전에 불필요하다고 생각합니다. – IdeaHat

+0

@IdeaHat Right. –

+0

주의를 기울이는 @Pure THX, _ _ MikeSeymoure_의 대답은 실제로 진행되고있는 것을 더 깊이 설명합니다. –

관련 문제