gpt4 book ai didi

c++ - 无法在 C++ 中解析符号

转载 作者:行者123 更新时间:2023-11-28 00:54:12 26 4
gpt4 key购买 nike

我正在为一个用 C++ 编写的类(class)项目工作。在尝试构建我的代码时,我不断收到一个奇怪的错误,说没有在其范围内声明一个符号。这可能是一个简单的修复,但我在论坛上找不到,而且我对 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 声明为私有(private)实例变量;没有太大变化

发现问题:我希望每个方法都作为 Menu::displaysub1()

最佳答案

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++ .

关于c++ - 无法在 C++ 中解析符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12441552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com