2013-04-12 24 views
5

için 'Char' dan geçersiz dönüşüm ı C'ye tamamen yeniyim ++ ve ben bu işlevi oluşturuldu:C++ Hata: 'const char *'

bool guessWord(string compWord) 
{ 
    cout << "Guess a letter: "; 
    string userLetter; 
    cin >> userLetter; 
    for (unsigned int x = 0; x < compWord.length(); x++) 
    { 
     string compLetter = compWord[x]; 
     if (compLetter == userLetter) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

Ama error: invalid conversion from 'char' to 'const char*' [-fpermissive] aşağıdaki döner. Bunun anlamını anlamada bana yardımcı olan var mı?

+3

Bana neyi 'hat 23 'anlamalarını sağlamaktır Sadece eğer. – WhozCraig

+0

Bu, bir char'dan const char işaretçisine dönüştürülemediğiniz anlamına gelir. 23 numaralı satırda, bir char char işaretçisini bekleyen bir şeye bir char geçirirsiniz. – jalf

cevap

4
string compLetter = compWord[x]; 

compWord[x]char alır ve string atamak için çalışıyoruz, bu yanlış. Ancak, kod, bu satırda

char compLetter = compWord[x];

+0

Eğer dize sınıfını sadece bununla ilgili olarak kullanmak istiyorsa: string compLetter = (char *) & compWord [x]; –

+0

@AbhijitKadam - Hayır, bu tamamen farklı bir sonuç verecektir. –

1

string compLetter = compWord[x];

gibi bir şey olmalıdır

string compLetter = compWord[x]; 

Bir üzere bir char atıyorsanız dize.

char compLetter = compWord[x]; 

bunu değiştirme hile yapalım mı.

1

olmalıdır

bool guessWord(string compWord) 
{ 
    cout << "Guess a letter: "; 
    char userLetter; 
    cin >> userLetter; 
    for (unsigned int x = 0; x < compWord.length(); x++) 
    { 
     char compLetter = compWord[x]; 
     if (compLetter == userLetter) 
     { 
      return true; 
     } 
    } 
    return false; 
} 
0

compWord [x], bir dizeye atamaya çalıştığınız string compWord'ta x'th karakterini verir.

Her iki dizeyi de doğrudan karşılaştırmalı veya paralel olarak yinelemeli ve karakter karakteriyle karşılaştırmalısınız.

0

string içinde bir karakter olup olmadığını görmek için std::string::find kullanabilirsiniz. Değilse, bu std::string::npos verir:

bool guessLetter(string compWord) 
{ 
    cout << "Guess a letter: "; 
    char userLetter; 
    cin >> userLetter; 
    return compWord.find(userLetter) != string::npos; 

}