【发布时间】:2015-11-24 11:02:59
【问题描述】:
我的程序有一个函数来计算一些总和,为此我需要访问向量中对象的属性:
向量声明:
class trilateration {
public:
...
std::vector<tip> *potential;
...
};
然后在构造函数中对其进行初始化:
trilateration::trilateration()
{
...
potential = new std::vector<tip>();
...
}
类提示如下所示:
class tip {
public:
double sum;
Point2d *pt;
tip();
tip(double x, double y);
virtual ~tip();
};
提示构造函数:
tip::tip(double x, double y)
{
pt = new Point2d(x,y);
sum=0;
}
在一些函数中将对象添加到向量中,如下所示:
potential->push_back(tip1);
然后我想像这样访问向量中的一些对象:
void trilateration::get3points()
{
for(int i=0; i<potential->size(); ++i)
{
for(int j=0; j<potential->size(); ++j)
{
potential[i].sum=potential[i].sum+normalize(potential[i].pt,potential[j].pt);
}
}
}
编译时出现以下错误:
error: ‘class std::vector<tip>’ has no member named ‘sum’
error: ‘class std::vector<tip>’ has no member named ‘pt’
如何从向量中访问这些属性?
编辑:
在将电位更改为三边测量的成员并将pt更改为提示的成员后,程序编译但遇到
potential.push_back(tip1);
抛出:
*** glibc detected *** ./loktest: malloc(): memory corruption: 0x00792f10 ***
【问题讨论】:
-
您需要取消引用,因为
potential是指向vector<tip>的指针:(*potential)[i]。恕我直言,您根本不应该有指向该向量的指针。 -
附注:如果没有充分的理由让
potential成为指针,请不要强迫它成为指针。pt的tip也是如此。