无法从' std :: string *'转换参数2 to' std :: string'

时间:2014-10-17 01:51:17

标签: c++ c++11

不确定为什么会发生这种情况,似乎所有事情都应该按照应有的方式排成一列,除非有我遗漏的东西。我无法传递这些变量,无论我试图抛出什么,它只是给了我另一个错误。

到目前为止,这是我的代码。

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, &param_1, &param_2, &param_3);

    cout << param_1 << endl << param_2 << endl << param_3 << endl << endl;
}

3 个答案:

答案 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, &param_1, &param_2, &param_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()旨在输出已解析的值,因此您需要:

  1. 更改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);
    
  2. 更改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);
    
  3. 如果需要所有三个参数,请使用#1。如果任何参数可以是可选的,请使用#2。

答案 2 :(得分:0)

在您的解析调用中,您正在传递&param_1,而string*创建param_1,而不是普通string,这将是您的函数所期望的{{1}}。