我记得在某个地方读书,不记得哪里,那个操作员 - >是短暂的。它将使用operator->查看对象。直到它找到一个不是指针然后运行普通运算符的东西。在那。但是我遇到了这个问题,
考虑以下代码:
#include <boost/shared_ptr.hpp>
#include <vector>
#include <iostream>
struct Foo {
Foo(int val) : i(val) {}
typedef boost::shared_ptr<Foo> ptr;
int i;
};
int main(int argc, char** argv) {
typedef std::vector<Foo::ptr> FooVec;
FooVec v;
for(FooVec::iterator it = v.begin(); it != v.end(); ++it) {
std::cout <<it->i <<std::endl;
}
return 0;
}
我收到此错误:
ptr.cpp: In function ‘int main(int, char**)’:
ptr.cpp:15:19: error: ‘class boost::shared_ptr<Foo>’ has no member named ‘i’
std::cout <<it->i <<std::endl;
因为boost :: shared_ptr不是指针。我可以通过编写
来解决这个问题std::cout <<(*it)->i <<std::endl
但是我认为这看起来更糟糕,我也尝试过std :: shared_ptr,但是遇到了同样的问题。有没有一种很好的方法来解决这个问题,还是我坚持使用(*it)->i
?
答案 0 :(得分:0)
我记得在某个地方读书,不记得哪里,那个操作员 - &gt; 是短暂的。
不在C ++中。你需要像你已经发现的那样进行双重引用。