修复了在 std::vector<std::vector > lum 中调用"分配"的错误不匹配函数<UC>;

Fix error no matching function for call to 'assign' in std::vector<std::vector<UC> > lum;

本文关键字:lt vector gt std 错误 不匹配 UC 函数 分配 调用 lum      更新时间:2023-10-16

我有来自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 );,其中Tvector<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))