C++ 修复了调用';时没有匹配函数的错误;分配';在std::vector<;标准::向量<;坎特伯雷大学&燃气轮机;卢姆;

C++ 修复了调用';时没有匹配函数的错误;分配';在std::vector<;标准::向量<;坎特伯雷大学&燃气轮机;卢姆;,c++,vector,C++,Vector,我有c++的参考代码: typedef unsigned char UC; std::vector<std::vector<UC> > lum; int h; int w; 我编译了这段代码并得到了错误: 没有用于调用“分配”的匹配成员函数 如何修复此错误?是否有任何与此函数匹配的函数可以替换?分配的重载是无效分配(大小类型计数、常数和值),其中T是向量。assign(int,int)的函数调用不匹配 void assign( size_type count, cons

我有c++的参考代码:

typedef unsigned char UC;
std::vector<std::vector<UC> > lum;
int h;
int w;
我编译了这段代码并得到了错误: 没有用于调用“分配”的匹配成员函数


如何修复此错误?是否有任何与此函数匹配的函数可以替换?

分配的重载是
无效分配(大小类型计数、常数和值)
,其中
T
向量
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 );
void赋值(大小\类型计数、常数和值);
模板<类输入>
无效分配(先输入,后输入);
无效分配(std::初始值设定项列表ilist);

正确的调用与此类似:
assign(h,vector(w))
该错误是正确的,因为它意味着您试图将
h
的值(无论
h
的值是多少)分配给
w
的值

但是,由于
assign
要求分配给实例的值必须是所分配的类型(也称为
value\u type
),因此实际上需要将值分配为
vector
类型

与代码相比,您试图为二维向量指定一个整数值,该整数值(如前所述)与
lum
vector
value\u type
不匹配,这解释了您所遇到的错误为什么?因为二维向量实际上是(某种类型的)向量向量。因此,只能将该类型的向量指定给二维向量

换句话说,类似这样的代码应该是正确的:

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);
typedef无符号字符UC;
std::载体;
int-h;
int w;
UC首字母='C';
向量向量向量(w,初始值);
lum.assign(h,vec);
然而,当你试图填充一个二维向量时,我只能猜测你试图以某种任意方式分配或初始化向量。根据您希望做什么,这种方法可能不合适

参考:


您通过呼叫分配实际想要实现什么?我不太明白。我从这个来源得到的:二维阵列?你想用vector实现它?所以,试着理解你想做什么,而不是试图找到一些有效的语法。让一个程序做一些你不理解的事情是没有意义的。如果我理解正确,你就有了一个向量向量。但是你把它赋值为一维向量。你想达到什么目标?您需要为2D向量指定一个向量。@cat对不起,您能详细说明一下吗?恐怕我没听懂你的话。@cat好的,太酷了。如果我的回答对你有用,请考虑接受。
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);