2012-03-14 2 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

+2

btw : 프로그래밍의 언어에서 함수와 변수 이름을 사용하면 훨씬 많은 사람들이 코드를 이해할 수 있으므로 도움을 얻는 것이 훨씬 쉬워집니다. – PlasmaHH

+0

궁금한 점은 어떤 언어입니까 (말할 수는 없습니까)? –

답변

12

작은 따옴표 (')가 아닌 문자열 리터럴에 큰 따옴표 (")를 사용해야합니다.

4

작은 따옴표 ('Lipton')를 사용하고 있습니다. 작은 따옴표는 char -literals입니다.

const char* 리터럴의 경우 "Lipton"을 사용하십시오.

2

문제가있는 라인에서 'Lipton'에서 "Lipton"으로 변경하면 컴파일 오류가 사라집니다.

는 C/C++에서 따옴표 표현은 문자열 (또는, 기술적, 문자열 리터럴)이며, 단일 인용 표현 문자 (또는문자 리터럴) 동안, char * 또는 const char * 유형에 해결에 해결 char 유형 (암시 적으로 int으로 캐스트 될 수 있음). 컴파일러가 정수 형식 char을 함수 서명에 필요한 const char *으로 변환 할 수 없습니다. 그것은 '립톤'또는 "립톤"

+0

그냥 메모. 문자열 리터럴은 항상 * const *로 해석됩니다. –

+1

C++의 문자열 리터럴 형식은'const char [N]'입니다. 여기서 N은 nul 종결자를 포함하는 문자열의 길이입니다. 'const char *'에 대한 암묵적인 변환이 있습니다. C++ 03에서는 C.III와의 호환성을 위해'char * '로 비추천 된 변환이 있습니다. C++ 11에서는 더 이상 사용되지 않는 변환이 제거되었습니다. 'hanyadikceg' 함수는'std :: string'을 요구합니다. 그리고'const char *'에서'std :: string'으로 또 다른 암시 적 변환이 있습니다. –

2
h = hanyadikceg('Lipton'); 

h = hanyadikceg("Lipton"); 
관련 문제