2017-03-03 1 views
1

하자가클래스 내부에있는 구조체를 얻는 방법은 무엇입니까?

class A{ 
public: 
    struct stuff{ 
     int x; 
     int y; 
    }; 
    stuff get_stuff(int index){ 
     if(index < vec_stuff.size() && index >= 0) return vec_stuff[index]; 
     else return nullptr; 
    } 
    std::vector<stuff> vec_stuff; 
}; 

내가 적절하게 그 vec_stuff를 채울 가정 내가 클래스가 말한다.

그런 다음 다른 클래스

#inclde "A.h" 
class B{ 
public: 
    B(){} 

    void f(int index, int k){ 

     xxxx = a.get_stuff(index) 
    } 

    A a; // assume A is initialized properly 
} 

그래서 나는 그것이 struct stuff해야이 xxxx를 쓴 장소 그러나 나는이 작업을 수행 할 때 내가 컴파일러을 어떻게 그래서 use of undeclared identifier을 얻을에서 내가 말하는거야 stuff는 것을 알고 A. 내부

당신은 범위 연산자를 사용하여 완전한 이름을 지정할 수 있습니다
+5

'else return nullptr;'HUH ?? –

+5

'자동 '입니까? ------- – Quentin

+1

@WhiZTiM 아니면'auto xxxx = a.get_stuff (index);'. 이것은'private '중첩 된 구조체로도 작업 할 수 있다는 장점이 있습니다. –

답변

6

:

A::stuff xxx = a.get_stuff(index); 
,536을

또는 컴파일러 나중에 C++ 11을 지원하는 경우에는 auto 키워드를 사용하여 유형 밖으로 컴파일러 그림하도록 할 수 있습니다 : 보조 노트로

auto xxx = a.get_stuff(index); 

:

귀하의 get_stuff 방법을 stuff 오브젝트를 리턴하려고 시도 했으므로 컴파일하지 않아야합니다. nullptrstuff 오브젝트가 아닙니다.

stuff get_stuff(int index){ 
    if(index < vec_stuff.size() && index >= 0) return vec_stuff[index]; 
    else return nullptr; 
} 

가치가있을 것으로 예상되어 예외적 인 경우라면 예외를 throw해야합니다. 그렇지 않으면 stuff*을 반환하고 &vec_stuff[index] 만 반환하면됩니다.

+0

'return nullptr'에 관해서는'throw exception'을해야합니까? – pokche

+0

@pokche 귀하의 유스 케이스에 따라 다릅니다. 가치가있을 것으로 예상된다면 예외적 인 경우입니다. 그런 다음해야합니다. 그렇지 않으면'stuff *'를 반환하도록하고'vec_stuff [index]; ' –

+2

@GillBates : 또는'optional '래퍼 만 반환하면됩니다. 솔직히 예외를 던지는 것은 mantras에 관계없이 합리적이고 간단하며 분명한 접근입니다 –

관련 문제