我正在为一个用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()
答案 0 :(得分: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;
};