0

私はC++で書かれたクラスのプロジェクトに取り組んでいます。コードをビルドしようとすると、シンボルがスコープ内で宣言されていないという奇妙なエラーが発生し続けます。これはおそらく簡単な修正ですが、フォーラムで見つけることができず、c++について自分で理解するのに十分な知識がありません。コードは次のとおりです。

#include "Menu.h"
#include "MovieCollection.h"
#include "Movie.h"

Menu::Menu() {
MovieCollection mc("Collection.txt");
}

void Menu::displayTopMenu(){
    MovieCollection mc("Collection.txt");
    cout<<"Press:\n"<<
        "1- To list all movies\n"<<
        "2- To search by title\n"<<
        "3- To search by year\n"<<
        "4- To search by Director\n"<<
        "5- To add a movie to the collection\n"
        "6- to remove a movie from the collection\n"
        "0- To exit the program\n";
}

void displaysub1(){
    mc.listAll();
    // This is the bit that gives me the "out of scope" error
}

そして、これもMenu.hファイルです...

#ifndef MENU_H_
#define MENU_H_

#include "Movie.h"
#include "MovieCollection.h"
#include <iostream>

using namespace std;

class Menu {
public:
Menu();
void displayTopMenu();
void displaysub1();
};

#endif /* MENU_H_ */

メッセージは次のとおりです:この行の複数のマーカー-'mc'はこのスコープで宣言されていません-シンボル'mc'は解決できませんでした-メソッド'listAll'はできませんでした

MovieCollection mcまた、プライベートインスタンス変数として宣言してみました。あまり変わっていない

問題を見つけました:私はそれぞれの方法を次のようにしたかったMenu::displaysub1()

4

1 に答える 1

3
void displaysub1(){
        mc.listAll();
    // This is the bit that gives me the "out of scope" error
    }

mcMenu::displayTopMenu()は、コンストラクターと同様にローカルです。そのメソッドの外部でアクセスする必要がある場合は、より高いスコープで宣言する必要があります。おそらくインスタンス変数として最適です。

また、displaysub1()これはメンバー関数ではないことに注意してください(ただし、これは単なるエラーである可能性が高いと思います)。そのため、クラスのメンバー変数にアクセスすることはできません。それらにアクセスする必要がある場合は、引数として渡す必要があります(またはmc静的にしますが、そうする理由はありません)。

class Menu {
public:
    Menu() : mc("Collection.txt") { }
private:
    // each instance gets a copy of this 
    // variable.  I can be accessed anywhere
    // within the class and is initialized
    // in the contructor's initialization list.
    MovieCollection mc;
};

さらに読むre:C++の可変スコープ/ライフタイム

于 2012-09-15T21:01:39.013 に答える