我有一个接收两个参数的函数:一个输入和一个输入/输出,第一个是常量类型string
,第二个是对array
的{{1}}的引用字符,问题在于当我传递数组的地址时,在编译unsigned char
这是我调用该函数的代码:
initial value of reference to non-const must be an lvalue
这是函数:
unsigned char in[20];
string str = "ABCDEF123456";
function(str, &in); //ERROR HERE
注意:函数的作用是将变量void function(const std::string &str, unsigned char *&in)
{
in = new unsigned char[str.length() / 2];
for (int aux = 0, tam_str = str.length(); aux != tam_str; aux += 2)
{
std::stringstream ss;
ss << std::hex << str.substr(aux, 2);
int valor;
ss >> valor;
in[aux / 2] = valor;
}
}
(十六进制值)的内容转换为字符数组str
。
答案 0 :(得分:2)
参数声明的类型与您传递的对象的类型不匹配。
回答新问题:
就像在旧版本中一样,您将一个指针传递给20个无符号字符的数组。但是参数类型是对指向无符号字符的指针的引用。那是行不通的。
要调用该函数,必须有一个指向未签名字符的指针:
unsigned char* ptr = in;
function(str, ptr);
另一方面,除非修改指针,否则按引用传递指针是没有意义的。因此,改为传递指针的副本可能更明智:
void function(const std::string &str, unsigned char *in);
function(str, in);
旧答案:
void function(const std::string &str, std::vector<unsigned char> &in)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
unsigned char in[20];
^^^^^^^^^^^^^^^^^^^^
function(str, &in); //ERROR HERE
^^^
已声明该函数接受对std::vector<unsigned char>
对象的引用。您尝试将地址传递给20个无符号char数组作为参数。那是行不通的。
要调用该函数,您需要一个向量对象:
std::vector<unsigned char> in;
function(str, in);