【发布时间】:2020-09-27 05:15:38
【问题描述】:
我知道这个问题已经被问过很多次了,但我已经尝试了一些建议,例如检查我的拼写、确保我包含了头文件、大写等,但我仍然遇到同样的错误并且可以不知道是什么触发了它。
当我尝试使用 g++ -c Customer.h 编译 Student.h 时,我收到错误“Student”没有在“Student student;”行上命名类型对于 Login.h,我不知道为什么。任何人都可以尝试查明是什么原因造成的吗?这个变量应该代表这个登录ID/帐户的学生,它应该是一个指向学生对象的指针。
同样,当我尝试编译 Login.h 时,我得到错误 'Login' has not been declared in Customer.h for bool addAcct(Login*) 以及错误 'Login' does not have a type for登录* 登录[MAX_LOGINS]。
任何帮助将不胜感激!
学生.h:
#ifndef STUDENT_H
#define STUDENT_H
#define MAX_LOGINS 4
#include <string>
#include "Login.h"
using namespace std;
class Student{
public:
Student(int = 0, string = "");
int getId();
bool addAcct(Login*);
void print();
private:
int id;
string name;
Login* logins[MAX_LOGINS];
int numberOfLogins;
};
#endif
登录.h
#ifndef LOGIN_H
#define LOGIN_H
#include <string>
#include "Student.h"
using namespace std;
class Login{
public:
Login(int = 0, float = 0);
int getNumber();
void setStudent();
void print();
private:
int number;
Student student;
};
#endif
【问题讨论】:
-
循环依赖,login.h 包含 student.h,而 student.h 又包含 login.h。你的两个类都需要先声明另一个类,这显然是不可能的情况。您需要研究前向声明。
-
特别是由于 Student 仅使用 Login 作为指针,您可以从 student.h 中删除 #include "login.h" 并将其替换为前向声明
class Login; -
我的情况是两个类之间都有双向关联,并且每个类都有另一个类的实例。我会研究更多关于循环依赖问题的,谢谢!
-
阅读 good C++ programming book 和您的 C++ 编译器(例如 GCC...)和调试器(例如 GDB...)的文档。使用
g++ -Wall -Wextra -g编译
标签: c++ class pointers compiler-errors