2012-03-14 164 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"); 
相关问题