I am a begginer in C++ . I am coding a multi file project and I encountered a bug I don't know how to work around . I am inherting from a base class of ModelUser which has the general info for a user account with a class that Is called NUser ,I am basically using polymorphism here. the error :
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
My code stops compiling when it hits class Nuser : public UserModel
and tells me It needs a class name before the in line 11 of Normal_User.hpp ' } ' . I searched around for the cause of this error and it seems to ambigious but what I Found out was that the class I am inheriting from is not defined at the point of the file the error occurs in . I don't know the reason why the class I inherit from is not included at the time of compilation of this file , I have used the class in other parts of the code and at the start of main , I have include guards and I have tested around to see if they are causing the problem but I dont really know .
then I tried to do a forward decleration which I know won't work because I will get an incomplete type error . SO I am kind of stuck here , here is a look at my files , I am using Polymorphism from a base user for a Normal user when I get this error. I havent included certain files ,feel free to comment if you need any other source.
Should i Change my code design here , because I don't see where I have gone wrong Normal_User.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
UserModel.hpp
#include <vector>
#include <iostream>
#include <string>
#ifndef _USER_MODEL_HPP_
#define _USER_MODEL_HPP_
#include "Recipe.hpp"
using namespace std;
class Recipe;
class UserModel
{
public:
string get_username();
string get_password();
bool get_logged_in();
void user_logout();
void user_login(bool value);
UserModel(vector<string> &commands, int user_size);
virtual void see_recipes(vector<Recipe*> recipes) = 0;
private:
int primary_key;
bool logged_in;
string username;
string password;
};
#endif
makefile
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 User_Model.hpp main_header.hpp
g++ -std=c++11 -g -c Normal_User.cpp -o Normal_User.o
.PHONY: clean
clean:
rm *.o output
Menu.hpp (Kind of my mother class )
#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
Aucun commentaire:
Enregistrer un commentaire