极端的c ++初学者在这里。我已经尝试将全局变量放入单独的头文件以及特定类本身中。在整个过程中,我收到“重新定义”错误。
以下是全局变量:
enum GRADE {F, D, CMINUS, C, CPLUS, BMINUS, B, BPLUS, AMINUS, A};
const int BAR = 60;
const int MAXSTUDENT = 100;
我在两个单独的类(分别为student.cpp和course.cpp)中使用和调用了它们。它们包含在“ global.cpp”中
这是Student.cpp中的标题
#include "student.hpp"
#include "global.cpp"
#include <iostream>
using namespace std;
这是Course.cpp中的标题
#include "course.hpp"
#include "student.cpp"
#include <iostream>
using namespace std;
无论标头是什么组合,或尝试将全局变量拆分为它们正在使用的类,我都会遇到“重新定义”错误。如果我在course.cpp部分中未包含“#student.cpp”,则不会收到错误消息,但是我需要Student.cpp才能使Course.cpp正常工作。
我走出了局限,不胜感激。
答案 0 :(得分:0)
创建文件global.h
。在该文件中,您可以声明全局变量。 enum GRADE
不是变量,而是类型。重要的是要记住,可以多次声明类型和变量,但是只能定义一次。因此,不要在标头中定义它们,而只需声明它们即可。如果要在多个cpp文件中使用相同的全局变量,则必须使用外部链接对其进行声明。
/* File global.h */
#pragma once
extern const int BAR;
extern const int MAXSTUDENT;
这是一个示例student.h
:
/* File student.h */
#pragma once
enum GRADE {F, D, CMINUS, C, CPLUS, BMINUS, B, BPLUS, AMINUS, A};
class Student
{
public:
Student();
virtual ~Student();
/* put more members here */
};
下面是一个示例course.h
:
/* File course.h */
#pragma once
#include "student.h"
class Course
{
public:
Course();
virtual ~Course();
void addStudent(Student& student);
private:
std:vector<Student*> students;
}
然后,您可以选择一个 * .cpp文件来定义全局变量。
例如,您将它们放在student.cpp
中。然后您就可以在student.cpp
中使用它们了:
/* File student.cpp */
#include "student.h"
const int BAR = 60;
const int MAXSTUDENT = 100;
/* definition of student methods ... for example */
Student::Student()
{ }
Student::~Student()
{ }
在这种情况下,您不会在global.h
文件中包含student.cpp
。
另外,请不要#include
任何* .cpp文件。
将学生班级的声明放到student.h
中,将学生班级的方法定义放到student.cpp
中。
在course.cpp
中仅包括global.h
,course.h
。但是student.h
已通过course.h
包括在内。然后,您也可以在此cpp中使用全局变量。
/* file course.cpp */
#include "course.h"
#include "global.h"
/* definition of course methods ... for example */
Course::Course()
{ }
Course::~Course()
{ }
Course::addStudent(Student& student)
{
if(students.size() < MAXSTUDENT) {
// ......
}
}
希望对您有帮助。