获得类类型重定义和一些其他错误

Getting class type redefinition and a few other errors

本文关键字:其他 错误 定义 类型      更新时间:2023-10-16

我正在为一个项目创建一个学生数据管理控制台应用程序。我创建了一个名为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 ?供参考。

我也有同样的错误。我只是清理和重建解决方案和错误解决。

相关文章: