Member 14903089 Ответов: 1

[Ошибка] недопустимое преобразование из 'char' в 'char*' [-fpermissive]


[Ошибка] недопустимое преобразование из 'char' в 'char*' [-fpermissive]

Что я уже пробовал:

void Print_Hangman(void);
void askingName_and_rules(std::string name);
void printingWords_to_guess(char ** words, int size );
int  getNumOfLines(const char * fileName );
void fillWords(char ** words, const char * fileName );
void guess_it(char guess);
bool compairing_words(char * guess , char word);

//int tries()

int main(int argc, char** argv) 
{  
    std::string name;
    char guess;
    Print_Hangman(); 
    askingName_and_rules(name);
    const char fileName [] = "hangman.txt";
    const int numOfWords = getNumOfLines(fileName);
    if(numOfWords <= 0)
    {
        std::cout << "word file is missing in the game directory.\nExiting Game...\n";
        return 0;
    }

//  std::cout << numofwords << '\n';

    char ** words = new char*[numofwords];

    fillwords(words, filename);
    std::cout << "file has " numofwords;
    printingWords_to_guess(words,numofwords);
    guess_it(guess);
    if( compairing_words( guess, words ) )
    {
       cout << "hey\n";   // ??????
    }
    else
    {
       cout << "bye\n";   // ??????
    }
    return 0;
}

bool compairing_words(char * guess, word )
{
   for(int i=0; i < word->length(); i++ )
   {
      if(word[i]==guess)
      {
         return true;
      }
      return false;
   }
}

void guess_it(char guess)
{
    std::cout << " Guess a letter \n";
    std::cin >> guess;
}

/*void tries(int tries)
{
    tries=5;
    while(tries<=0)
    {
        guess_it(); 
    }
}*/


void Print_Hangman(void)
{
    std::cout << "\n";

    std::cout << "\t\t    H        H      A       N      N     G G G       " << "\n";
    std::cout << "\t\t    H        H     A  A     N N    N    G            " << "\n" ;
    std::cout << "\t\t    H HHHHHH H    A AA A    N  N   N   G     G G G   " << "\n" ;
    std::cout << "\t\t    H        H   A      A   N   N  N    G    G   G   " << "\n" ;
    std::cout << "\t\t    H        H  A        A  N    N N     G G G   G   " << "\n" ;

    std::cout << "\n";

    std::cout << "  \t\t\t    M       M        A       N      N    " << "\n";
    std::cout << "  \t\t\t    M M   M M       A  A     N N    N    " << "\n" ;
    std::cout << "  \t\t\t    M  M M  M      A AA A    N  N   N    " << "\n" ;
    std::cout << "  \t\t\t    M   M   M     A      A   N   N  N    " << "\n" ;
    std::cout << "  \t\t\t    M       M    A        A  N    N N    " << "\n" ;
}

void askingName_and_rules(std::string name)
{
    std::cout << " Enter your Name \n";
    std::cin >> name;
	
    std::cout << "\n\n So " << name << " before starting the game you have to follow some rules : ";
    std::cout << "\n\n 1: All letters should be small \n 2: you have 5 tries to guess word ";
    std::cout << "\n The word you have to guess is : \n";
}


void printingWords_to_guess(char ** words, int size )
{
    srand(time(NULL));
    int random_number = rand()%size;
    std::string word   = words[random_number];
    std::cout << word.replace(1,3,"_ _ _") << '\n';
    return;
}

int getNumOfLines(const char * fileName )
{
    int count =0 ;
    std::string line;
    std::ifstream file(fileName);
    while(std::getline(file,line)){
        count++;
    }
    file.close();
    return count;
}

void fillWords(char ** words, const char * fileName )
{
    std::ifstream file(fileName);
    std::string line;
    int i =0;
    while(std::getline(file, line))
    {
        words[i] = new char[line.length()];
        for(int j = 0; j < line.length(); ++j)
        {
            words[i][j] = line[j];
        }
        words[i][line.length()] = '\0';
        ++i;
    }
    file.close();
}

Richard MacCutchan

Пожалуйста, правильно отформатируйте свой код, удалите дубликат и объясните, где именно происходит ошибка.

Patrice T

А положение ошибки таково ...
Информация находится в полном сообщении об ошибке.

Joe Woodbury

Я озадачен, почему вы продолжаете использовать 'new' вместо того, чтобы создавать векторы std::string.

Есть и другие вопросы:

    
    while(std::getline(file, line))
    {
        words[i] = new char[line.length()];
        for(int j = 0; j < line.length(); ++j)
        {
            words[i][j] = line[j];
        }
        words[i][line.length()] = '\0';
        ++i;
    }

Вы выделяете линию.length (), а затем присвоение завершающего нуля после окончания выделения.

bool compairing_words(char * guess, word )
{
   for(int i=0; i < word->length(); i++ )
   {
      if(word[i]==guess)
      {
         return true;
      }
      return false;
   }
}


Вы возвращаете false после первой проверки.

1 Ответов

Рейтинг:
1

Rick York

Одной из проблем, по-видимому, является функция угадывания. Он должен возвращать символ, а не принимать его в качестве аргумента. Это должно выглядеть примерно так :

char guess_it( void )
{
    char guess;
    std::cout << " Guess a letter \n";
    std::cin >> guess;
    return guess;
}