我似乎无法管理访问向量元素的语法,其指针包含在结构中。 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()
,它不是的选项因为我不想要范围检查的开销。这是性能关键代码的一部分。
答案 0 :(得分:5)
A.X
是指针。您需要取消引用它以访问它指向的向量:
float C = (*A.X)[0];
但是如果你没有初始化A.X
指向任何东西,解除引用它有未定义的行为,它在你看来就像你在这个程序中。
答案 1 :(得分:3)
A.X[0]
尝试访问X
指向的第一个向量 - 记住,这是一个指针。
要在向量本身上使用operator[]
,您可以使用A.X->operator[](0)
,但老实说,我没有看到您的成员是指针而不是对象的原因。
您的代码会显示未定义的行为,因为X
是一个统一指针
vec A;
A.X->push_back(5.0);
这里。