Проблема с включением текста из файла .txt в C ++ для кредитов - PullRequest
0 голосов
/ 02 марта 2012

Я работал над главным меню, чтобы использовать его для моей текстовой приключенческой игры (которую я использую, чтобы учить, а не публиковать), но у меня с ним большие проблемы. В главном меню есть три параметра: играть, показывать кредиты и завершать программу. Второй вариант, отображающий кредиты, должен получить информацию из файла credits.txt и опубликовать ее на экране, а после того, как пользователь нажмет кнопку, вернуть пользователя в главное меню. Главное меню построено в виде заголовочного файла (menu.h), а основная игра находится в test_project.cpp. Я приведу полный menu.h и часть .cpp здесь, плюс ошибку, конечно:


Menu.h:

#ifndef MENU_H

#define MENU_H

void displayMenu () {
    int menuItem;
    bool menuRunning = true;

    while ( menuRunning ) {
        cout << "Choose a menu item:\n";

        cout << "1. Play\n2. Credits\n3. Exit\n";
        cin >> menuItem;

        switch ( menuItem ) {
            case 1:
                menuRunning = false;
                break;
            case 2:
                ifstream creditsFile("credits.txt");
                while ( !creditsFile.eof() )
                {
                    string readLine;
                    getline(creditsFile, readLine);
                    cout << readLine;                               
                }

                creditsFile.close();
                break;
            case 3:
                menuRunning = false;
                exit(0);
            default:
                cout << "";
        }

        cout << "\n---\n";
    }
}

#endif

Test_project.cpp:

#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>

using namespace std;

#include "menu.h"

int main()
{
    displayMenu(); // This is where the functions from menu.h must be loaded, before the actual game starts.

    system("TITLE Title of the program comes here");

    // This is where the game starts, which loads when the user presses 1.
    int ab, cd;

А вот и ошибка:

menu.h: In function `void displayMenu()':
In file included from test_project.cpp:11:
menu.h:29: error: jump to case label
menu.h:20: error:   crosses initialization of `std::ifstream creditsFile'
menu.h:32: error: jump to case label
menu.h:20: error:   crosses initialization of `std::ifstream creditsFile'
menu.h:29: warning: destructor needed for `creditsFile'
menu.h:29: warning: where case label appears here
menu.h:29: warning: (enclose actions of previous case statements requiring destructors in their own scope.)
menu.h:32: warning: destructor needed for `creditsFile'
menu.h:32: warning: where case label appears here
In file included from test_project.cpp:11:
menu.h:40:7: warning: no newline at end of file

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

попробуйте переписать случай 2 следующим образом:

case 2:{
    ifstream creditsFile("credits.txt");
    while ( !creditsFile.eof() ){
        string readLine;
        getline(creditsFile, readLine);
        cout << readLine;                               
    }
    creditsFile.close();
    break;
}

Изменить

заменить содержимое Menu.h следующим:

#ifndef MENU_H
#define MENU_H

void displayMenu () {
    int menuItem;
    bool menuRunning = true;

    while ( menuRunning ) {
        cout << "Choose a menu item:\n";
        cout << "1. Play\n2. Credits\n3. Exit\n";
        cin >> menuItem;
        switch ( menuItem ) {
            case 1:{
                menuRunning = false;
                break;
            }
            case 2:{
                ifstream creditsFile("credits.txt");
                while ( !creditsFile.eof() ){
                    string readLine;
                    getline(creditsFile, readLine);
                    cout << readLine;                               
                }
                creditsFile.close();
                break;
            }
            case 3:{
                menuRunning = false;
                exit(0);
            }
            default:
                cout << "";
        }
        cout << "\n---\n";
    }
}
#endif
1 голос
/ 02 марта 2012

Попробуйте переместить ifstream creditsFile("credits.txt"); до оператора switch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...