从'int'无效转换为'const char *'
我在代码块上使用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;
}
是什么原因导致这个错误?
对于字符串文字而不是单引号('
),您需要使用双引号("
)。
您正在使用单引号('Lipton'
)。单引号为char
-literals。
使用"Lipton"
,文字为const char*
。
在问题行中更改'Lipton'
到"Lipton"
并且编译错误将消失。
在C/C++,双引号表达式都是字符串(或,在技术上,字符串文字)和解决char *
或const char *
类型,而单引号表达式是字符(或字符文字)和解决char
类型(可隐式转换为int
)。这解释了您的错误:编译器无法将整数类型char
转换为函数签名所需的const char *
。
只是一个说明。字符串文字*总是*解析为'const'。 – 2012-03-14 13:58:20
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
h = hanyadikceg('Lipton');
应该
h = hanyadikceg("Lipton");
是 '立顿' 或 “立顿”? – UmNyobe 2012-03-14 13:05:03
btw:在编程的通用语言中使用函数和变量名称使获得帮助变得容易得多,因为更多的人能够理解代码。 – PlasmaHH 2012-03-14 13:05:49
只是好奇,这是什么语言(我不明白)? – 2012-03-14 13:09:15