无法在C ++中解析符号

时间:2012-09-15 20:57:03

标签: c++ scope

我正在为一个用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()

1 个答案:

答案 0 :(得分: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;
};

进一步阅读:variable scope/lifetime in C++