今天我想使用集合Vector保存一系列的坐标点时,遇见了一个问题,问题如下,请论坛的各位大大指点:
我在头文件中定义了 一个容器 保存坐标点 Vector<Point *>p; 在cpp文件中使用了如下方法:p.pushBack(&Point(bodyNode->getPositionX(),bodyNode->getPositionY()));
但是在编译过程中报如下图中的错误
求各位大大指点
看来Vector真的是新手的大坑。。。。 我也卡在Vector上了
你为什么加上&符号?
这不是变成地址了吗?地址不就是字符串,字符串属于value类型,而vector不能存放value类型,应使用valuevector65
p.pushBack(Point(x,y));
亲啊!这样是不行的 Vector定义的保存类型是引用类型 你保存的就是实例对象 不是对象的引用
&表示引用 我保存的是引用类型 不加&就是实例对象 要报错的
不要试图在 cocos2d::Vector 中保存除 cocos2d::Object 子类对象指针以外的其他任意数据类型对象。
typedef Vec2 Point;
Point并非一个cocos2d::Object类型,你可以这样做
std::vectorp;
p.push_back(Point(1, 2));
Point mPoint = p.back();
CCLOG(“mPoint.x : %f , mPoint.y : %f”, mPoint.x, mPoint.y);
建议不要用Vector, Map等大写开头的非stl的容器,这些的存在都很违和,只是为了插入删除的时候retain, release。
请直接用std::vector. 如果希望插入的时候自动retain删除的时候自动release, 可以用下面的类包一下而不是重写一个容器。
template
class cocos_ptr {
public:
cocos_ptr(T *ptr) : ptr_(ptr) { if (ptr_) ptr_->retain(); }
~cocos_ptr() { if (ptr_) ptr_->release(); }
…
private:
T *ptr_;
}
然后直接存std::vector<cocos_ptr>
受教了 谢谢!
刚开始学习 懂的不是很多 谢谢你的指导!受教了
不好意思 还想请教你一个问题 我使用std::vectorp; 如何实现像Vector一样的插入功能呢?我看方法中有insert方法 但是里面的参数不是很明白也不像 Vector中的 小白很多地方不理解烦请你指导一下 