我在int
中创建了一个名为x
的{{1}}类型的向量,然后希望我的类main
的实例名为A
来初始化其向量a
到x_vec
的共享指针。如果通过引用或值传递向量x
,但如果将向量x
作为指针传递,则可以成功初始化共享指针(因此,如果x
发生变化, x
),然后收到错误消息:
x_vec
我的代码:
/usr/include/c++/6/ext/new_allocator.h:120:4: error: cannot convert ‘std::vector<int>’ to ‘int’ in initialization
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
感谢您的帮助和耐心,因为我缺乏理解。
答案 0 :(得分:0)
在
A(std::vector<int>* a_val)
a_val
作为指针传递。这意味着在
x_vec.emplace_back(std::make_shared<int> (a_val[i]));
a_val[i]
索引了指针a_val
,而不是它指向的vector
,从而导致元素std::vector<int>
而不是int
。
您可以
x_vec.emplace_back(std::make_shared<int> ((*a_val)[i]));
并取消引用指针以获取vector
的{{1}}而不是指针,但是解决此问题的正确方法是...
operator []
由于仅被读取,因此A(std::vector<int> & a_val)
引用可能是为了接受常量和临时变量。
const
使用
调用A(const std::vector<int> & a_val)
代替
A a(x);
缺少一点后飞溅:
A a(&x);
需要成为
for(int i = 0; i < a_val->size(); ++i)
因为a_val不再是指针,可能应该是
for (int i = 0; i < a_val.size(); ++i)
因为for (size_t i = 0; i < a_val.size(); ++i)
不返回size()
删除调试语句时,请考虑将其转换为基于范围的for循环。
int