2013-05-18 2 views
3

클래스를 가지고 vector::iterator을 반환함으로써 클래스 외부의 객체 Baz 내부의 포인터 모음을 순환하려고합니다.객체 외부의 unique_ptr 컬렉션을 반복합니다.

'const class std::unique_ptr' has no member named 'getName'

누군가에 무슨 일이 일어나고 있는지 설명 할 수와 어떻게 바즈 내부의 독특한 포인터 컬렉션을 루프를 관리 할 수 ​​있습니다 : 나는 for 루프를 실행하면 나는 다음과 같은 오류가 발생합니다? 미리 감사드립니다.

#include <iostream> 
#include <string> 
#include <memory> 
#include <vector> 

class BaseInterface 
{ 
protected: 

std::string Name; 

public: 

virtual ~BaseInterface(){} 
virtual void setName(std::string ObjName) = 0; 
virtual std::string getName() = 0; 
}; 

class Foo : public BaseInterface 
{ 
public: 

void setName(std::string ObjName) 
{ 
    Name = ObjName; 
} 

std::string getName() 
{ 
    return Name; 
} 

}; 

class Bar : public BaseInterface 
{ 
public: 

void setName(std::string ObjName) 
{ 
    Name = ObjName; 
} 

std::string getName() 
{ 
    return Name; 
} 

}; 

class Baz 
{ 
    protected: 

    std::vector< std::unique_ptr<BaseInterface> > PointerList; 

    public: 

    void push_back(std::unique_ptr<BaseInterface> Object) 
    { 
     PointerList.push_back(std::move(Object)); 
    } 

    std::vector< std::unique_ptr<BaseInterface> >::const_iterator begin() 
    { 
     return PointerList.begin(); 
    } 

    std::vector< std::unique_ptr<BaseInterface> >::const_iterator end() 
    { 
     return PointerList.end(); 
    } 

}; 

int main(int argc, char ** argv) 
{ 

std::unique_ptr<BaseInterface> FooObj(new Foo()); 
FooObj->setName("Foo"); 

std::unique_ptr<BaseInterface> BarObj(new Bar()); 
BarObj->setName("Bar"); 

std::unique_ptr<Baz> BazObj(new Baz()); 

BazObj->push_back(std::move(FooObj)); 
BazObj->push_back(std::move(BarObj)); 

for(auto it = BazObj->begin(); it != BazObj->end(); ++it) 
{ 
    std::cout << "This object's name is " << it->getName() << std::endl; 
} 

return 0; 
} 

답변

3

당신은 먼저 반복자를 역 참조한다 : I 시도

std::cout << "This object's name is " << (*it)->getName() << std::endl; 
//          ^^^^^ 
+0

* 그것은뿐만 아니라하지만 난 생각 나는 괄호에 대해 잊어 버렸습니다. 내 실수를 지적 해 주셔서 감사합니다. – Tek

+0

@ Teek : 기꺼이 도와주었습니다 –

+0

사소한 후속 조치가 있었지만'->'는 이미 그것을 역 참조 할 것입니다. 때로는'*'만 필요하기 때문에 혼란 스럽습니다. – Tek