获得类类型重定义和一些其他错误
Getting class type redefinition and a few other errors
我正在为一个项目创建一个学生数据管理控制台应用程序。我创建了一个名为Student的类,它存储了学生需要的所有数据,它还拥有与之相关的所有getter和setter。以下是我所有文件的布局:
Student.h
#include <iostream>
#include <string>
using namespace std;
class Student {
private:
string name;
string id;
string email;
int presentation;
int essay1;
int essay2;
int project;
public:
//constructor
//Student();
//setters
void set_name(string);
void set_id(string);
void set_email(string);
void set_presentation(int);
void set_essay1(int);
void set_essay2(int);
void set_project(int);
//getters
string get_name();
string get_id();
string get_email();
int get_presentation();
int get_essay1();
int get_essay2();
int get_project();
};
Student.cpp
#include <iostream>
#include <string>
#include "Student.h"
using namespace std;
//constructor definition
/*
Student::Student(void) {
cout << "Student created" << endl;
}
*/
//setter definition
void Student::set_name(string s) {
name = s;
}
void Student::set_id(string s) {
id = s;
}
void Student::set_email(string s) {
email = s;
}
void Student::set_presentation(int a) {
presentation = a;
}
void Student::set_essay1(int a) {
essay1 = a;
}
void Student::set_essay2(int a) {
essay2 = a;
}
void Student::set_project(int a) {
project = a;
}
//getter definition
string Student::get_name() {
return name;
}
string Student::get_id() {
return id;
}
string Student::get_email() {
return email;
}
int Student::get_presentation() {
return presentation;
}
int Student::get_essay1() {
return essay1;
}
int Student::get_essay2() {
return essay2;
}
int Student::get_project() {
return project;
}
Main.cpp
#include <iostream>
#include <string>
#include "Student.h"
using namespace std;
int main() {
cout << "Hello World!" << endl;
Student student1;
Student student2;
Student student3;
student1.set_name("John");
student2.set_name("Bob");
student3.set_name("Carl");
return 0;
}
当我尝试运行程序时,我得到以下错误:
错误1错误C2011: 'Student': 'class'类型重新定义
错误2:错误C2079: 'student1'使用未定义的类'Student'
错误5错误C2228: left of '。Set_name '必须有class/struct/union
错误9错误C2027:使用未定义的类型'Student'
我该如何着手解决这个问题?
我很确定这是由于student.h
在某个.cpp
文件中包含两次而导致的错误。因此,您需要使用所谓的标题保护来确保该文件仅在每个.cpp
文件中包含一次:
#ifndef STUDENT_H
#define STUDENT_H
#include <iostream>
#include <string>
using namespace std;
class Student {
/* ... */
};
#endif
这背后的想法是#include
是一个预处理器指令,导致参数文件被复制到发出#include
的文件中。因此,如果文件A和B包含Student.h
,文件C同时包含文件A和B,那么class Student
的声明最终将是重复的。因此产生了错误。上面的宏确保不会发生这种情况。
根据问题作者的评论进行编辑:
#pragma once
与#ifndef .. #define #endif
相同,但非标准。
参见#pragma once vs include guard ?供参考。
我也有同样的错误。我只是清理和重建解决方案和错误解决。
相关文章:
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 为什么当我没有变量或其他任何命名的东西时"no match for 'operator==' "错误?
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- operator_surrogate_func:未找到匹配的重载和其他2个错误
- C++ 在方程中使用变量;错误:表达式必须具有整数或无作用域枚举类型及其他
- C++ 在多个其他类中使用单个类 - 编译时出现多个定义错误
- 错误 LNK1104:错误消息中显示的路径未在其他依赖项中定义
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- 驾驶执照考试计划.无法将 std:: 字符串转换为 std :: 字符串和其他错误
- 构造函数找不到合适的定义,以及 100 个其他错误?
- 新的操作员帮助,类型分配器和其他错误
- 为什么if语句中未定义的参数不会导致segfault或其他错误
- 警告 1 警告 C4244:"参数":从"time_t"转换为"无符号 int",可能会丢失数据以及其他错误
- boost asio async_write未在断开连接的客户端上生成管道破裂或其他错误
- 获得类类型重定义和一些其他错误
- 在 Eclipse 中使用 OpenCV 在项目中C++构建错误:对"SelectObject@8"的未定义引用 + 许多其他错误
- 捕获 Segfault 或任何其他错误/异常/信号C++例如在 Java 中捕获异常
- C++ 如果和如果其他错误消息