今天在使用vector的时候碰到了这个错误,出错的代码书写形式
在VS的 官方描述中这样描述此错误:"-> 运算符必须返回一个类、结构或联合,或者返回对其中之一的引用。"
std::vector<BlockBase*>::const_iterator iter = BlockBufferList.begin();
for (; iter != BlockBufferList.end(); ++iter)
{
*iter->Clear();
}
BlockBase 的形式如下
class BlockBase :public StreamBase
{
public:
BlockBase() //!< 构造函数,初始化成员变量
{
}
virtual ~BlockBase() //!< 析构函数,所有数据清零
{
}
virtual void Clear() = 0;
};
在查阅资料之后发现需要将
*iter->Clear();
改写为
(*iter)->Clear();
问题就得以解决了。
错误分析:在VS的 官方描述中这样描述此错误:"-> 运算符必须返回一个类、结构或联合,或者返回对其中之一的引用。"
虽然我没能在网上找到合理的解释,但我认为造成这样的原因在于:
当你不加括号的时候,编译器会存在不明确的转换,如:
*iter->Clear();
是应该理解为
(*iter)->Clear();
还是理解为
*(iter->Clear());
若是后者这显然vector中没有`Clear()`函数,就会触发
error C2039: “clear”: 不是“std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<obitsdk::BlockBase *>>>”的成员