c++;向量和推回 我得到了一个奇怪的C++错误: main.cpp:81:9: error: request for member ‘push_back’ in ‘points’, which is of non-class type ‘std::vector<std::vector<float> >()’ 我的错误在哪里,为什么C++不喜欢这个?这对我来说很直观

c++;向量和推回 我得到了一个奇怪的C++错误: main.cpp:81:9: error: request for member ‘push_back’ in ‘points’, which is of non-class type ‘std::vector<std::vector<float> >()’ 我的错误在哪里,为什么C++不喜欢这个?这对我来说很直观,c++,vector,push-back,C++,Vector,Push Back,非常感谢您的帮助 这是MVP(最令人烦恼的解析)的一个例子: 向量点(); 这实际上是一个函数声明,请将其更改为: vector<vector<float> > points; 矢量点; 用第一个版本,C++认为你声明一个函数,称为点,它不带任何参数,返回一个向量的向量向量。这就是为什么它抱怨它是非类类型。这是MVP(最令人烦恼的解析)的一个例子: 向量点(); 这实际上是一个函数声明,请将其更改为: vector<vector<float> &

非常感谢您的帮助

这是MVP(最令人烦恼的解析)的一个例子:

向量点();
这实际上是一个函数声明,请将其更改为:

vector<vector<float> > points;
矢量点;

用第一个版本,C++认为你声明一个函数,称为点,它不带任何参数,返回一个向量的向量向量。这就是为什么它抱怨它是非类类型。

这是MVP(最令人烦恼的解析)的一个例子:

向量点();
这实际上是一个函数声明,请将其更改为:

vector<vector<float> > points;
矢量点;

用第一个版本,C++认为你声明一个函数,称为点,它不带任何参数,返回一个向量的向量向量。这就是为什么它抱怨它是非类类型的。

C++是否自动地默认构建器?是的,它仍然是默认构造的。最令人烦恼的解析是否涉及C++有一个模糊的语法?@ DYP:实际上,语法本身是含糊的。该标准只是解决了这个歧义,它说所有可以解析为函数声明的东西都将被解析为函数声明。@celtschk它看不出来,因为正如Xeo指出的,初始值设定项的语法似乎是expression list,而不是expression list[opt](其他地方都是如此)。(这实际上是一个技术细节,因为效果是一样的)C++是否自动地默认构建器?是的,它仍然是默认构造的。最令人烦恼的解析是否涉及C++有一个模糊的语法?@ DYP:实际上,语法本身是含糊的。该标准只是解决了这个歧义,它说所有可以解析为函数声明的东西都将被解析为函数声明。@celtschk它看不出来,因为正如Xeo指出的,初始值设定项的语法似乎是expression list,而不是expression list[opt](其他地方都是如此)。(这实际上是一个技术细节,因为效果是一样的。)注意,向量向量是一个用于操纵“点”的糟糕数据结构。如果使用多个点,则“点”向量的动态分配的开销将是巨大的。一个
类点
或至少一个
std::array
(或
std::tr1::array
)会更好。@BenJackson,如果所有点的维度都相同;)@DyP如果他们不这样做,
std::tuple
来营救他们。可能的重复请注意,向量向量是操纵“点”的糟糕数据结构。如果使用多个点,则“点”向量的动态分配的开销将是巨大的。一个
类点
或至少一个
std::array
(或
std::tr1::array
)会更好。@BenJackson,如果所有点的维度都相同;)@DyP如果他们不这样做,
std::tuple
,就去救援。
vector<vector<float> > points;