我似乎無法管理訪問矢量元素的語法,其指針包含在結構中。更多的MWE後:運算符前的解除引用成員指針[]
#include <vector>
#include <stdio.h>
typedef struct vectag
{
std::vector<float> *X;
} vec;
int main()
{
vec A;
A.X = new std::vector<float>(0);
A.X->push_back(5.0);
// This next line is the problem:
float C = A.X[0];
printf("%f\n", C);
return 1;
}
GCC(G ++)說
14:24: error: cannot convert ‘std::vector<float>’ to ‘float’ in initialization
,當然,這是相當正確的。在行float C = A.X[0];
中,如果X不是指針(召回,std::vector<float> *X;
),則B.X [0]將是正確的。 在operator []之前解引用X的正確語法是什麼,以便我可以訪問X的元素?
P.S. 我知道會員功能at()
,它不是對我來說,因爲我不希望範圍檢查的開銷。這是性能關鍵代碼的一部分。
A.X-> operator [](0),起作用。謝謝。它是一個指針,因爲在我的應用程序中,它與其他事物一起被封裝在一個結構中。使用vect的要點是它是可變大小的,所以我不能把它放在結構體的中間。哦,我忘了在MWE中初始化它。在我的代碼中,我正確地初始化它。我編輯了上面的MWE。 – Timtro