指向不同.h文件的类指针

时间:2014-11-04 13:50:49

标签: c++ class

Helo堆叠人,我需要你帮助我做的工作。所以我必须.h文件第一个是课程,第二个是学生,我尝试创建函数调用getCourses但不幸的是它不太顺利。我的实现“课程**课程”不通过编译,我不知道为什么不。我会评价你是否可以帮助我理解我的错误并帮助我解决它们。

getCourse - 返回课程列表

我的课程.h文件

#ifndef _CORSE_H
#define _CORSE_H
#include <iostream>
#include "Student.h"

class Course
{
public:
void init(std::string getName, int test1, int test2, int exam);
std::string getName();
int* getGrades();
double getFinalGrade();

private:
std::string _name;
int _exam;
int _test1;
int _test2;
};

#endif

我的学生.h档案 -

#ifndef _STUDENT_H
#define _STUDENT_H
#include <iostream>
#include "Course.h"

class Student
{
public:
void init(std::string name, Course** courses, int crsCount);
std::string getName();
void setName(std::string name);
double getAvg();
int getCrsCount();
Course** getCourses();

private:
std::string _name;
Course** courses;
int _crsCount;
};


#endif

我的课程功能 -

Course** student::getCourses()
{
  return(this->courses);
}

“Course ** getCourses();”初始化中的问题,这也适用于init函数和Course ** getCourses();功能。 错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int

2 个答案:

答案 0 :(得分:4)

你有一个循环依赖 - 每个标题试图包含另一个,你最终会在另一个之前定义一个类。这会产生错误,因为您必须在使用其名称之前声明类型。

Course完全不依赖Student,所以只需从该文件中删除#include

Student的定义仅使用指向Course的指针,因此它不需要完整定义。它只需要知道该类是否存在,因此您可以用声明替换#include

class Course;

还有几点:

  • 两个标题都应包含<string>,因为它们使用std::string;但不是<iostream>,因为他们不使用任何I / O流;
  • 以下划线开头的名称和资本(如_CORSE_H)保留。你应该删除下划线。
  • 您在最终的代码段中错误地标记了Student

答案 1 :(得分:0)

除了Mike Seymour所写的课程功能外,还使用了小写学生 Course** student::getCourses()

虽然你用一个大写字母S宣布了这个类。但案件确实很重要。