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;
}
* 그것은뿐만 아니라하지만 난 생각 나는 괄호에 대해 잊어 버렸습니다. 내 실수를 지적 해 주셔서 감사합니다. – Tek
@ Teek : 기꺼이 도와주었습니다 –
사소한 후속 조치가 있었지만'->'는 이미 그것을 역 참조 할 것입니다. 때로는'*'만 필요하기 때문에 혼란 스럽습니다. – Tek