Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单个类有一个类重新定义错误 我是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 - Fatal编程技术网

单个类有一个类重新定义错误 我是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++新手,我在头文件中遇到了类定义的问题。 头文件(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

编译器错误表示第14行(类学生)是对“学生”的重新定义,第15行({--类学生后面的大括号)是对“学生”的先前定义。 StudentSchedule类的前两个连续行上存在相同的错误

我的编译中没有定义这两个类的.c、.cpp或.h文件。我不知道为什么会出现此错误。

您需要在该头文件上添加这些文件。它可能包含了两次

修改标题,将这些行添加到开头和结尾

#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