【问题标题】:invalid conversion from 'int' to 'const char*' [duplicate]从'int'到'const char *'的无效转换[重复]
【发布时间】:2012-03-30 22:39:48
【问题描述】:

我在代码块上使用gcc,我想编写一个使用记录数组的函数。

但是我不断收到错误:

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

是什么导致了这个错误?

【问题讨论】:

  • 顺便说一句:在编程的通用语中使用函数和变量名称可以更容易获得帮助,因为更多的人能够理解代码。
  • 只是好奇,那是什么语言(我不知道)?
  • @Jesse,我相信是匈牙利语。
  • @Jesse:谷歌翻译自动检测声称它是匈牙利语。
  • 是的,它是匈牙利语。我用这种语言写的,因为这是一个学校作业,我们使用了匈牙利语的所有变量。但我知道在大多数情况下使用英语会更好。顺便说一句,我不知道这如何成为一个“著名的问题”?

标签: c++


【解决方案1】:

您需要对字符串文字使用双引号 ("),而不是单引号 (')。

【讨论】:

    【解决方案2】:

    您正在使用单引号 ('Lipton')。单引号用于char-literals。

    使用"Lipton",作为const char* 文字。

    【讨论】:

      【解决方案3】:

      将问题行中的'Lipton'更改为"Lipton",编译错误就会消失。

      在 C/C++ 中,双引号表达式是字符串(或者,技术上,字符串文字)并解析为 char *const char * 类型,而单引号表达式是字符(或字符文字)并解析为char 类型(可以隐式转换为int)。这解释了您的错误:编译器无法将 char 整数类型转换为函数签名所需的 const char *

      【讨论】:

      • 只是一个注释。字符串文字总是解析为const
      • C++ 中的字符串文字的类型为const char[N],其中 N 是字符串的长度,包括 nul 终止符。有一个到 const char* 的隐式转换,而在 C++03 中,为了与 C.IIRC 兼容,不推荐使用到 char* 的转换,在 C++11 中删除了不推荐使用的转换。函数hanyadikceg 调用std::string,还有另一个从const char*std::string 的隐式转换。
      【解决方案4】:
      h = hanyadikceg('Lipton');
      

      应该是

      h = hanyadikceg("Lipton");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多