编译时我的程序有问题。我试着弄清楚3-4个小时,但仍然没有找到解决方法。最后的结果是我想在多个.cpp文件中使用struct students
而不会出现多个定义的错误..你能帮助我吗?这是代码:
student.h
#ifndef STUDENT
#define STUDENT
#include <string>
using namespace std;
extern int var;
struct students {
char CodSt[20];
string NumeSt;
string PrenSt;
string DenDisc1;
string MedCD1;
string DenDisc2;
string MedCD2;
string DenDisc3;
string MedCD3;
};
#endif
getStudents.cpp
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int var = 0;
extern struct students *student;
void getStudents() {
int i = 0;
ifstream ifs("Curenta.txt");
while(!ifs.eof()) {
ifs >> student[i].CodSt >> student[i].NumeSt >> student[i].PrenSt >> student[i].DenDisc1
>> student[i].MedCD1 >> student[i].DenDisc2 >> student[i].MedCD2 >> student[i].DenDisc3
>> student[i].MedCD3;
if(!ifs.eof()) {
i++;
}
var = i;
}
ifs.close();
}
编译错误:
In function 'void getStudents()':
[Error] invalid use of incomplete type 'struct students'
[Error] forward declaration of 'struct students'
and same, so on..
提前致谢。
答案 0 :(得分:0)
如果您想使用struct students
,请将#include "student.h"
文件存入.cpp
文件。这样做会导致预编译器&#34;插入&#34;将头文件放入源代码文件中,从而提供struct
的正确定义。
关于你的代码的一些附注(叫我迂腐,但如果你早点学习这些规则,它会长期帮助你):
struct
被命名为`学生&#39; (复数)但包含文件是&#39; student.h&#39; (单数)using namespace ...
。原因是:如果有人(即使你从现在开始一年,当你忘记了这个文件的实现细节)有一个不同的string
类具有相似的语义但不来自标准库?如果这样的用户包含students.h
个文件,那么&#34;突然&#34;所有自定义string
成为从标准库中提取的,确保有趣的调试日期:)extern struct students * student;
文件中会有.cpp
行。这是一个错误,或者(如果没有)提供一个简短的评论来解释你为什么需要这一行是个好主意