2012-03-14 284 views
4

我在代碼塊上使用gcc,我想編寫一個使用記錄數組的函數。從'int'無效轉換爲'const char *'

不過,我不斷收到錯誤:

invalid conversion from 'int' to 'const char*' 

代碼:

#include <iostream> 
#include <string> 

using namespace std; 

struct rendeles { 
    string nev; 
int mennyiseg; 
}; 

struct teaceg { 
string nev; 
int mennyiseg; 
}; 

int szam; 
struct rendeles rendelt [100];  
struct teaceg cegek [100];   
int h; 

int hanyadikceg (string cegnev) 
{        
    for (int i=0;i<szam;i++) 
    { 
     if (cegek[i].nev==cegnev) 
      { 
       return i; 
      } 
    } 
    return -1; 
} 

int main() 
{ 
    cout << "Hány db rendelés lesz összesen?"; 
    cin >> szam; 
    if (szam > 100) 
    { 
     cout << "Hiba: túl nagy a rendelések száma! (100 a maximum)"; 
     return -1; 
    } 

    for (int i=0;i<szam;i++)   
    { 
     cout << "A(z) " << i+1 <<". cég neve:"; 
     cin >> rendelt[i].nev;         
     cout << "A(z) " << i+1 <<". rendelés mennyisége:"; 
     cin >> rendelt[i].mennyiseg;       
    } 
    cout << endl; 

    h = hanyadikceg('Lipton');    //the problem is in this line 
    cout << "Hanyadik cég a xyz:" << h; 

    for (int i=0;i<szam;i++)   
    { 
     cout << "A(z) " << i+1 << ". rendelés: " << rendelt[i].nev << " " <<  rendelt[i].mennyiseg << endl; 
    } 

    return 0; 
} 

是什麼原因導致這個錯誤?

+3

是 '立頓' 或 「立頓」? – UmNyobe 2012-03-14 13:05:03

+2

btw:在編程的通用語言中使用函數和變量名稱使獲得幫助變得容易得多,因爲更多的人能夠理解代碼。 – PlasmaHH 2012-03-14 13:05:49

+0

只是好奇,這是什麼語言(我不明白)? – 2012-03-14 13:09:15

回答

12

對於字符串文字而不是單引號('),您需要使用雙引號(")。

4

您正在使用單引號('Lipton')。單引號爲char -literals。

使用"Lipton",文字爲const char*

2

在問題行中更改'Lipton'"Lipton"並且編譯錯誤將消失。

在C/C++,雙引號表達式都是字符串(或,在技術上,字符串文字)和解決char *const char *類型,而單引號表達式是字符(或字符文字)和解決char類型(可隱式轉換爲int)。這解釋了您的錯誤:編譯器無法將整數類型char轉換爲函數簽名所需的const char *

+0

只是一個說明。字符串文字*總是*解析爲'const'。 – 2012-03-14 13:58:20

+1

C++中的字符串常量的類型爲'const char [N]',其中N是包含nul終止符的字符串的長度。有一個隱式轉換爲'const char *',並且在C++ 03中,爲了與C. IIRC兼容,不再推薦轉換爲'char *',不贊成使用的轉換在C++ 11中被刪除。函數'hanyadikceg'需要一個'std :: string',另外還有一個從'const char *'到'std :: string'的隱式轉換。 – 2012-03-14 14:05:08

2
h = hanyadikceg('Lipton'); 

應該

h = hanyadikceg("Lipton"); 
相關問題