修复了在 std::vector<std::vector > lum 中调用"分配"的错误不匹配函数<UC>;
Fix error no matching function for call to 'assign' in std::vector<std::vector<UC> > lum;
我有来自c++的参考代码:
typedef unsigned char UC;
std::vector<std::vector<UC> > lum;
int h;
int w;
这行代码:
lum.assign(h,w);
我编译了此代码,但出现错误:调用"assign"没有匹配的成员函数
如何修复此错误?这个函数有什么匹配的函数可以替换吗?
这个错误是正确的,因为这意味着您试图将w
的值分配给h
的量(无论h
的值是多少)。
但是,由于assign
要求分配给实例的值是所分配的类型(也称为value_type
),因此您实际上需要分配类型为vector<UC>
的值。
与您的代码相比,您正试图为2-D向量分配一个整数值,该整数值(如前所述)与lum
(vector<UC>
)的value_type
不匹配,这解释了您出现的错误为什么因为二维向量实际上是(某种类型的)向量的向量因此,只能将该类型的向量分配给2-D向量,没有其他。
换句话说,像这样的代码应该是正确的:
typedef unsigned char UC;
std::vector<std::vector<UC> > lum;
int h;
int w;
UC initial = 'C';
vector<UC> vec(w, initial);
lum.assign(h, vec);
然而,当你试图填充一个二维向量时,我只能推测你试图以某种任意的方式分配或初始化向量。根据你想做什么,这种方法可能不合适。
参考文献:
http://www.cplusplus.com/reference/vector/vector/assign/
assign
的过载为void assign( size_type count, const T& value );
,其中T
为vector<UC>
。assign(int, int)
的函数调用不匹配。
void assign( size_type count, const T& value );
template< class InputIt >
void assign( InputIt first, InputIt last );
void assign( std::initializer_list<T> ilist );
正确的调用类似于以下内容:assign(h, vector<UC>(w))
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- std::vector的包装器,使数组的结构看起来像结构的数组
- 呼叫运营商<<临时
- 为什么(-1)%vector::size()总是返回0
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在C++中将类(带有Vector成员)保存为二进制文件
- 编译器如何区分std::vector的构造函数
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- std::vector::reserve(未知m),我知道m<<;N(通常)并且知道N
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- C++重载<<具有typedef'd std::vector
- std::映射<>或std::vector<>在处理大型标志集时