gpt4 book ai didi

c++ - 使用不同文件声明函数/vector 的 C++ 中的多重定义错误

转载 作者:行者123 更新时间:2023-12-02 10:52:59 25 4
gpt4 key购买 nike

对于这个广泛的(正文)问题,我很抱歉,但我在尝试将我的 main() 函数与我的 read.cc 文件分开时遇到了问题。

起初我在我的 中写了我的 main()阅读.cc 因为它更容易测试并且运行良好。现在我正在模块化我的代码并在不同的文件( main.cc )中使用 main(),但我得到一个“多重定义错误”。

//course.h
#ifndef _COURSE_H
#define _COURSE_H

#include "dependencies.h"
class Course{

public:
int id;
std::string id_if;
std::string name;
std::string dayTime;
};

#endif


//read.h

#ifndef _READ_H
#define _READ_H

#include "../Classes/course.h"

#include "../Classes/dependencies.h"

using namespace std;

vector <Course*> course;

void readCourse();

void courseCheck(Grade* a, string* temp);
void dispoCheck(Teacher* teacher, string* temp, int day);
const vector<string> explode(const string& s, const char& c);

#endif


//read.cc

void readCourse(){
Course* inp = new Course();

ifstream file;
file.open("../Data/Cursos.csv");

string temp;

getline(file, temp, '\n');

while(file.good()){
getline(file, temp, ';');
inp->id = stoi(temp);

getline(file, inp->id_if, ';');

getline(file, inp->name, ';');

getline(file, inp->dayTime, '\n');
}

course.push_back(inp);

}


//main.cc

#include "Input/read.h"

int main(){

readCourse();

}

错误:
g++ main.cc Input/read.cc -o exe -lm

/tmp/ccyRgnlM.o:(.data+0x0): multiple definition of `course'
/tmp/ccoTZsnQ.o:(.data+0x0): first defined here
collect2: ld returned 1 exit status

最佳答案

从您的代码中,尚不清楚您要做什么。由于course仅在 readCourse 中使用方法,因此可以在函数内部本地声明。

我假设(未显示)您也想在 main 中使用它.

由于这是 C++(而不是 C),因此最好避免使用全局变量。您的 course变量应该是一个类的静态成员,可能是 Course类本身(因为它是一个列表,最好使用复数名称)。另外,您的 readCourse方法应该是静态成员,例如

//course.h
class Course{

public:
int id;
std::string id_if;
std::string name;
std::string dayTime;

static std::vector<Course*> courses;
static void readCourse();
};

// course.cc
void Course::readCourse(){
...
}

std::vector<Course*> courses; // Defines you single courses object

然后在 main()您可以通过以下方式访问它:
int main(){

Course::readCourse();

Course::courses[0]->doSomething();
}

}

关于c++ - 使用不同文件声明函数/vector 的 C++ 中的多重定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61250984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com