在多文件项目中,{标记之前应为类名 我是C++中的乞丐。 我正在编写一个多文件项目,遇到了一个我不知道如何解决的bug。 我是从ModelUser的一个基类继承的,这个基类有一个名为user的类的用户帐户的一般信息,我在这里基本上使用多态性。 错误: In file included from Score.hpp:5, from Recipe.hpp:6, from UserModel.hpp:6, from Chef.hpp:1, from Menu.hpp:6, from main.cpp:2: Normal_User.hpp:11:1: error: expected class-name before ‘{’ token 11 | { | ^ make: *** [Makefile:7: main.o] Error 1

在多文件项目中,{标记之前应为类名 我是C++中的乞丐。 我正在编写一个多文件项目,遇到了一个我不知道如何解决的bug。 我是从ModelUser的一个基类继承的,这个基类有一个名为user的类的用户帐户的一般信息,我在这里基本上使用多态性。 错误: In file included from Score.hpp:5, from Recipe.hpp:6, from UserModel.hpp:6, from Chef.hpp:1, from Menu.hpp:6, from main.cpp:2: Normal_User.hpp:11:1: error: expected class-name before ‘{’ token 11 | { | ^ make: *** [Makefile:7: main.o] Error 1,c++,oop,c++11,makefile,C++,Oop,C++11,Makefile,我的代码在点击class-User:public-UserModel时停止编译,并告诉我在Normal_User.hpp'}的第11行之前需要一个类名。 我四处搜索这个错误的原因,似乎有点含糊不清,但我发现我从中继承的类没有在发生错误的文件点定义。 我不知道为什么我继承的类在编译这个文件的时候没有被包括在内,我在代码的其他部分使用过这个类,在main的开始,我已经包括了防护,我已经测试过了,看看它们是否导致了这个问题,但我真的不知道 然后我试着做一个向前的去宽容,我知道这是行不通的,因为我会得到

我的代码在点击
class-User:public-UserModel
时停止编译,并告诉我在Normal_User.hpp'}的第11行之前需要一个类名。 我四处搜索这个错误的原因,似乎有点含糊不清,但我发现我从中继承的类没有在发生错误的文件点定义。 我不知道为什么我继承的类在编译这个文件的时候没有被包括在内,我在代码的其他部分使用过这个类,在main的开始,我已经包括了防护,我已经测试过了,看看它们是否导致了这个问题,但我真的不知道

然后我试着做一个向前的去宽容,我知道这是行不通的,因为我会得到一个不完整的类型错误。所以我有点被困在这里,这里是我的文件,当我得到这个错误时,我使用的是从一个基本用户到一个普通用户的多态性。我还没有包括某些文件,请随时评论,如果你需要任何其他来源

我是否应该在这里更改代码设计,因为我看不出哪里出了问题 普通用户.hpp

#include <vector>
#include <iostream>
#include <string>
#include "UserModel.hpp"
#ifndef _NORMAL_USER_HPP_
#define _NORMAL_USER_HPP_
#include "Recipe.hpp"
class Recipe;
using namespace std;
class Nuser : public UserModel
{
public:
    Nuser(vector<string> &commands, int user_size);
    void see_recipes(vector<Recipe *> recipes);
private:
};
#endif
Menu.hpp(有点像我的母亲班)


#包括
#包括
#包括
#ifndef\u菜单\u水电站_
#定义\u菜单\u水电站_
#包括“Chef.hpp”
#包括“普通用户.hpp”
#包括“UserModel.hpp”
#包括“outerior_functions.hpp”
使用名称空间std;
班级菜单
{
公众:
无效直接命令(向量和命令);
无效注册(矢量和命令);
无效登录(向量和命令);
无效检查重复项(字符串和用户名);
无效句柄注册(向量和命令);
无效句柄_登录(向量和命令);
用户模型*用户搜索(字符串用户名);
无效注销();
菜单();
私人:
矢量用户;
病媒配方;
UserModel*当前用户;
};
#恩迪夫
您在两个文件中使用相同的#定义:

#ifndef _NORMAL_USER_HPP_
#define _NORMAL_USER_HPP_
这意味着当您包含一个文件时,不会包含其他文件

您必须在每个文件中使用不同的#定义值。或者,如果您有足够新的编译器,请使用一次
#pragma


Hm哦,也许你只是在问题中包含了两次相同的文件。请编辑您的问题,使其准确无误,并请包括对调用的编译行和生成的错误消息的剪切和粘贴,而不是为我们解释它们。

UserModel.hpp包括Recipe.hpp,包括Score.hpp,包括Normal_User.hpp,包括UserModel.hpp,循环依赖性。我可能想注意,我只是在最近才添加了多态性,在添加多态性之前,我通过添加一个虚拟函数,程序运行良好,我再次尝试将程序更改回正常继承,但我得到了相同的错误,因此公平地说,我不知道这里发生了什么。@S.M.感谢您的评论,代码正在运行,我必须编辑Score.hpp以防止循环依赖,我在那里提供了前向减速。这个问题不再符合条件,我将不再尝试发布解决方案,因为它对任何人都没有用处。主持人,请随意结束提问。
CC= g++
CXXFLAS = g++ -std=c++11 -g 
LDBFLAGS =
output: main.o outerior_functions.o UserModel.o Normal_User.o  Menu.o Chef.o Recipe.o  Exception.o
    g++ -std=c++11 -g main.o UserModel.o  Exception.o outerior_functions.o Menu.o Normal_User.o Chef.o Recipe.o -o output
main.o: outerior_functions.cpp main.cpp outerior_functions.hpp
    g++ -std=c++11 -g   -c main.cpp -o main.o 
UserModel.o: UserModel.cpp UserModel.hpp main_header.hpp
    g++ -std=c++11 -g   -c UserModel.cpp -o UserModel.o
outerior_functions.o: outerior_functions.cpp outerior_functions.hpp
    g++ -std=c++11 -g   -c outerior_functions.cpp -o outerior_functions.o
Exception.o: Exception.cpp Exception.hpp main_header.hpp
    g++ -std=c++11 -g   -c Exception.cpp -o Exception.o
chef.o: chef.cpp chef.hpp main_header.hpp
    g++ -std=c++11 -g   -c chef.cpp -o chef.o
Recipe.o: Recipe.cpp Recipe.hpp main_header.hpp
    g++ -std=c++11 -g   -c Recipe.cpp -o Recipe.o
Menu.o: Menu.cpp Menu.hpp main_header.hpp
    g++ -std=c++11 -g   -c Menu.cpp -o Menu.o
Normal_User.o: Normal_User.cpp Recipe.hpp Normal_User.hpp UserModel.hpp main_header.hpp 
    g++ -std=c++11 -g   -c Normal_User.cpp -o Normal_User.o
.PHONY: clean
clean:
    rm *.o output


#include <vector>
#include <string>
#include <iostream>
#ifndef _MENU_HPP_
#define _MENU_HPP_
#include "Chef.hpp"
#include "Normal_User.hpp"
#include "UserModel.hpp"
#include "outerior_functions.hpp"
using namespace std;
class Menu
{
public:
    void direct_command(vector<string> &commands);
    void signup(vector<string> &commands);
    void login(vector<string> &commands);
    void check_duplication(string &username);
    void handle_signup(vector<string> &commands);
    void handle_login(vector<string> &commands);
    UserModel *user_search(string username);
    void logout();
    Menu();

private:
    vector<UserModel *> users;
    vector<Recipe *> recipes;
    UserModel *current_user;
};
#endif

#ifndef _NORMAL_USER_HPP_
#define _NORMAL_USER_HPP_