不确定为什么会发生这种情况,似乎所有事情都应该按照应有的方式排成一列,除非有我遗漏的东西。我无法传递这些变量,无论我试图抛出什么,它只是给了我另一个错误。
到目前为止,这是我的代码。
void parse(string name, string storage_1, string storage_2, string storage_3)
{//some code
}
//some more code
int start = 0;
int length = 0;
string param_1, param_2, param_3;
while (!infile.eof())
{
if (!infile)
{
cout << "ERROR: File " << file << " could not be located!" << endl << endl;
break;
}
param_1.clear();
param_2.clear();
param_3.clear();
line_input.clear();
getline(infile, line_input);
parse(line_input, ¶m_1, ¶m_2, ¶m_3);
cout << param_1 << endl << param_2 << endl << param_3 << endl << endl;
}
答案 0 :(得分:2)
在函数声明中:
void parse(string name, string storage_1, string storage_2, string storage_3)
第二个,第三个和第四个参数是按值传递的string
。
但是在函数调用中:
string param_1, param_2, param_3;
parse(line_input, ¶m_1, ¶m_2, ¶m_3);
您正在将地址传递给这些字符串(指针)。
您可以将声明更改为:
void parse(string name, string* storage_1, string* storage_2, string* storage_3)
或者更改函数调用以使用引用:
void parse(string name, string& storage_1, string& storage_2, string& storage_3)
parse(line_input, param_1, param_2, param_3);
答案 1 :(得分:0)
错误不言自明。您正在传递指针不在预期的指针。具体来说,您使用&
运算符将参数值传递给parse()
,但它不需要指针。
由于parse()
旨在输出已解析的值,因此您需要:
更改parse()
以使用引用,并在调用&
时删除parse()
运算符:
void parse(string name, string &storage_1, string &storage_2, string &storage_3)
{
//some code
storage_1 = ...;
storage_2 = ...;
storage_3 = ...;
}
parse(line_input, param_1, param_2, param_3);
更改parse()
以使用指针,并保留&
运算符:
void parse(string name, string *storage_1, string *storage_2, string *storage_3)
{
//some code
*storage_1 = ...;
*storage_2 = ...;
*storage_3 = ...;
}
parse(line_input, ¶m_1, ¶m_2, ¶m_3);
如果需要所有三个参数,请使用#1。如果任何参数可以是可选的,请使用#2。
答案 2 :(得分:0)
在您的解析调用中,您正在传递¶m_1
,而string*
创建param_1
,而不是普通string
,这将是您的函数所期望的{{1}}。