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
    }

mc是本地的Menu::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;
};

进一步阅读:C++ 中的变量范围/生命周期

于 2012-09-15T21:01:39.013 回答