首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无效使用不完整类型的“结构学生”和前向声明

无效使用不完整类型的“结构学生”和前向声明
EN

Stack Overflow用户
提问于 2018-06-05 07:55:49
回答 1查看 2.4K关注 0票数 0

我的程序编译时有问题。我试着想了3-4个小时,但还是没找到解决办法。最后的结果是,我想要在多个struct students文件中使用.cpp,而不需要多个定义为..。你们能帮帮我吗?下面是代码:

student.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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();
}

编译器错误:

代码语言:javascript
复制
In function 'void getStudents()':
[Error] invalid use of incomplete type 'struct students'
[Error] forward declaration of 'struct students'

and same, so on..

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-06-05 08:11:26

如果你想使用你的struct students,你应该把#include "student.h"文件变成你的.cpp文件。这样做会导致预编译器将头文件“插入”到源代码文件中,从而提供struct的正确定义。

一些关于您的代码的附带说明(请称我学究,但如果您很早就了解了这些规则,它将有助于您长期工作):

  • 在你的命名上要保持一致。您的struct名为“`students”(复数),但包含的文件是'student.h‘(单数)。
  • 不要在包含文件中使用using namespace ...。原因是:如果某个人(一年后,当您忘记了这个文件的实现细节)拥有一个不同的string类,具有相似的语义,而不是标准库中的,那么该怎么办?如果这样的用户包括了那个students.h文件,那么“突然”所有的自定义string都变成了从标准库中提取出来的,确保了几天的调试乐趣:)
  • 还不清楚为什么在您的extern struct students * student;文件中会有一个.cpp行。要么这是个错误,要么(如果不是)提供一个简短的评论来解释你为什么需要这一行是个好主意。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50694978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档