2014-10-17 583 views
0

不知道爲什麼會發生這種情況,似乎所有東西都應該排列起來,除非有什麼東西丟失。我無法傳遞這些變量,無論我試圖在編譯器中拋出什麼,它只是給了我另一個錯誤。無法將參數2從'std :: string *'轉換爲'std :: string'

這是我的代碼到目前爲止。

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; 
} 
+1

任何特別的原因,你正在做'的&param_x'而不是簡單地'param_x'? – 0x499602D2 2014-10-17 01:53:01

+1

編譯器錯誤表示它:您正在將指針傳遞給您的解析函數,但它期望字符串。 – Oguk 2014-10-17 01:53:27

+0

我想自己修改param_x變量 – 2014-10-17 01:55:26

回答

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); 
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); 
    

如果需要所有三個參數,使用#1。如果任何參數可以是可選的,請使用#2。

0

在您的來電來解析,您傳遞&param_1,它創建了一個string*,而不是純param_1,這將是你的函數需要string

相關問題