我有来自c ++的参考代码:
typedef unsigned char UC;
std::vector<std::vector<UC> > lum;
int h;
int w;
这行代码:
lum.assign(h,w);
我编译了这段代码并得到了错误: 没有匹配成员函数来调用'assign'
如何修复此错误?我可以替换这个功能的匹配功能吗?
答案 0 :(得分:1)
该错误是正确的,因为这意味着您正在尝试分配h
的{{1}}金额(无论h
的值是多少){{1 }}
但是,由于w
要求指定为实例的值是已分配的类型(也称为assign
),因此您实际需要将值指定为类型{{1 }}
与您的代码相比,您试图为2-D向量分配一个整数值,如前所述,与value_type
vector<UC>
不匹配}(value_type
) - 这解释了你得到的错误。 为什么?因为 2-D矢量实际上是矢量(某种类型)的矢量。因此,您只能将该类型的矢量指定给a二维矢量,别的。
换句话说,这样的事情应该是正确的代码:
lum
但是,当您尝试填充二维向量时,我只能猜测您正试图以某种任意方式分配或初始化向量。根据您的意愿,这种方法可能不合适。
参考:
答案 1 :(得分:0)
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))