作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试图通过让类返回一个 vector::iterator
从类外部循环遍历对象 Baz
内的指针集合。当我运行 for
循环时,出现以下错误:
“const class std::unique_ptr”没有名为“getName”的成员
有人可以解释发生了什么以及我如何设法遍历 baz 中的唯一指针集合吗?提前致谢。
#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;
}
最佳答案
你应该首先取消引用你的迭代器:
std::cout << "This object's name is " << (*it)->getName() << std::endl;
// ^^^^^
关于c++ - 在对象外部循环遍历 unique_ptr 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627735/
我是一名优秀的程序员,十分优秀!