[Ошибка] недопустимое преобразование из '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 после первой проверки.