我无法在其他地方找到答案,所以我想我只需要问一下:我正在尝试获取一个矢量的别名(其中存储了int指针),如下所示:
void conversion(Engine * ENGINES)
{//The Engine class has a vector of int* as a public data member called SITE
for (int i = 0; i < 3; i++)
{
vector <int*>* current = &(ENGINES[i].SITE);//the problematic line
int j_max = current -> size();
cout << j_max << endl;
for (int j = 0; j < j_max; j++)
{
for (int k = 0; k < 3; k++)
{
if (*current[j][k] == 2)
*current[j][k] = 1;
if (*current[j][k] == -1)
*current[j][k] = 0;
}
}
}
}
问题是* current [a] [b]的索引似乎有倒置。我希望能够将current用作法向量,但现在索引与之相反:
vector <int*> current1 = ENGINES[1].SITE;
所以*current[i][j] = current1[j][i]
由于某种原因。我的语法有错吗?
答案 0 :(得分:3)
我认为您的问题是[]
的优先级高于一元*
。所以你得到*(current[j][k])
而不是(*current)[j][k]
,这就是你想要的。
但是你可以通过引用而不是指针来消除这个问题:
vector <int*>& current = (ENGINES[i].SITE);
然后在访问*
时删除额外加载的current
运营商。
答案 1 :(得分:1)
问题是[]
的优先级高于*
(取消引用),因此*current[i][j]
被解释为*(current[i][j])
,这可能不是您想要的。
实际上,这种混叠的习惯用法通常表示为引用,而不是指针:
vector <int*>& current = ENGINES[i].SITE;
并简单地使用current[i][j]
。
答案 2 :(得分:0)
正如我在评论中所怀疑的那样,使用参考文献。
vector <int*> ¤t = ENGINES[i].SITE;