C++ 如何对参考对象使用向量

C++ 如何对参考对象使用向量,c++,vector,visual-studio-2013,C++,Vector,Visual Studio 2013,我试图将一个对象从x*by-ref-in发送到一个向量holding,我得到以下错误 addWidget(const Widget& nWidget){ Widgets.push_back(nWidget); 1智能感知:重载函数“std::vector::push_back[with _Ty=Widget*,_Alloc=std::allocator]”的实例与参数列表不匹配 参数类型为:(常量小部件*) 对象类型为:std::vector 我在这里遗漏了什么?根据错误消息,似乎小

我试图将一个对象从x*by-ref-in发送到一个向量holding,我得到以下错误

addWidget(const Widget& nWidget){
Widgets.push_back(nWidget);
1智能感知:重载函数“std::vector::push_back[with _Ty=Widget*,_Alloc=std::allocator]”的实例与参数列表不匹配
参数类型为:(常量小部件*)
对象类型为:std::vector

我在这里遗漏了什么?

根据错误消息,似乎
小部件
是一个
std::vector
。如果是这种情况,那么只需将指针指向
nWidget
,即可使代码正常工作:

    1   IntelliSense: no instance of overloaded function "std::vector<_Ty, _Alloc>::push_back [with _Ty=Widget *, _Alloc=std::allocator<Widget *>]" matches the argument list
        argument types are: (const Widget *)
        object type is: std::vector<Widget *, std::allocator<Widget *>>

以及将
小部件
更改为
std::vector
,或将参数更改为
小部件&
(删除
常量
)--将指针指向
小部件常量&
将导致
小部件常量*
,因此您将得到一个错误,即您正在丢弃常量限定符。

显示您的小部件声明。它可能应该是std::vector,而不是你拥有的任何东西;(基本形式是Char**Widgets),但我们被允许使用func的名称必须是“addWidget(const Widget&nWidget)”,我们不被允许更改它,我尝试使用“Widgets.push_back(&nWidget);”但我仍然得到一个错误,显然添加向量解决了这个错误,但在这种情况下,我将无法更改小部件中的任何值,因为它本身存储在一个数组中,还是我弄错了?@SoNiC306,因为
常量
-ness是不同的。如果无法更改函数的签名,则必须将向量更改为
std::vector
。感谢您的回答,还有一件事。。。“const widgets*”和“widget const*”的区别是什么?它对me@SoNiC306我更喜欢<代码> T const */COD>过 const t*<代码>,因为在C++中,你从右向左读,而<>代码> T const */COD>更一致。例如,
T const*const
从右到左被解读为“指向常数T的常数指针”。
const T*const
稍微弄脏了水面:“指向T的常数指针……这是常数。”如果你总是把
const
紧跟在你想要成为常数的东西之后,就不会有任何潜在的歧义。
Widgets.push_back(&nWidget);