单个类有一个类重新定义错误 我是C++新手,我在头文件中遇到了类定义的问题。 头文件(Student.h)的代码为: #包括 使用名称空间std; 班级学生 { //学生的数据成员 字符串id; 字符串首选项[3]; 智力技能; //建造师 公众: 学生(){} 公众: void SetID(字符串str) {this->id=str;} 公众: 无效设置杀死(int i) {this->skill=i;} 公众: void SetPreferences(int i,字符串s) { 此->首选项[i]=s; } }; 班级学生时间表 { 公众: StudentSchedule(){} };
编译器错误表示第14行(类学生)是对“学生”的重新定义,第15行({--类学生后面的大括号)是对“学生”的先前定义。 StudentSchedule类的前两个连续行上存在相同的错误 我的编译中没有定义这两个类的.c、.cpp或.h文件。我不知道为什么会出现此错误。您需要在该头文件上添加这些文件。它可能包含了两次 修改标题,将这些行添加到开头和结尾单个类有一个类重新定义错误 我是C++新手,我在头文件中遇到了类定义的问题。 头文件(Student.h)的代码为: #包括 使用名称空间std; 班级学生 { //学生的数据成员 字符串id; 字符串首选项[3]; 智力技能; //建造师 公众: 学生(){} 公众: void SetID(字符串str) {this->id=str;} 公众: 无效设置杀死(int i) {this->skill=i;} 公众: void SetPreferences(int i,字符串s) { 此->首选项[i]=s; } }; 班级学生时间表 { 公众: StudentSchedule(){} };,c++,class,redefinition,C++,Class,Redefinition,编译器错误表示第14行(类学生)是对“学生”的重新定义,第15行({--类学生后面的大括号)是对“学生”的先前定义。 StudentSchedule类的前两个连续行上存在相同的错误 我的编译中没有定义这两个类的.c、.cpp或.h文件。我不知道为什么会出现此错误。您需要在该头文件上添加这些文件。它可能包含了两次 修改标题,将这些行添加到开头和结尾 #ifndef STUDENT_H #define STUDENT_H // Put the entire contents of your hea
#ifndef STUDENT_H
#define STUDENT_H
// Put the entire contents of your header here...
#endif
定义不需要是STUDENT\H
…它只需要是唯一的
添加这些指令后,如果头文件已经被解析,编译器将忽略它的所有内容
或者,而所有主要编译器都允许您放置单个
#pragma once
作为标头的第一行,以防止对其进行多次解析。您可能包含了两次.h文件,第一次它将定义Student,第二次它将尝试重新定义Student 有关此问题的更详细说明以及如何避免此问题的信息,请参阅 简而言之,有两种方法 版本1,定义包括防护装置
#ifndef STUDENT_HPP
#define STUDENT_HPP
...your code here...
#endif
通常#define称为文件名的某种变体,因为它在每个include文件中都必须不同
版本2,#pragma一次
#pragma once
...your code here...
这个pragma(和大多数pragma一样)不可移植到所有编译器,但它还有一个优点,即不需要手动指定名称
你用哪一个取决于你自己,但你很可能必须选择一个:)我更喜欢用
#pragma once
作为头文件的第一行,而不是定义。即使它是非标准的,它也避免了名称冲突,并且可以减少编译时间。
< P>当我们学习C++时,我们的教授说,C++类中写的前两行应该始终是“IFNDEF”,然后是“x”定义。这防止了头文件中的多个定义这很好(当然更简单),但这不是标准的C++是的,这是唯一的缺点。对我来说,优点超过了这一点。
#pragma once