今天遇到了一个问题,没有在cpp中调用相应h文件,却能够运行

学习时出现的一个无厘头的问题,虽然可以解决,但是我好奇极了。
例:构建顺序表 DataElement .h,SequenceList.h,以及SequenceList.cpp, main.cpp。
SequenceList.h中包含DataElement.h,SequenceList.cpp包含SequenceList.h, main中只引用了DataElement.h,但DataElement.h没有调用SequenceList.h,运行时发现T2.h中声明的函数没有被main调用

我怀疑我可能看错了,我再仔细排查一下

定义DataElement.h 创建顺序表

#ifndef DATAELEMENT_H_INCLUDED
#define DATAELEMENT_H_INCLUDED

#define MAX_SIZE 255

//1、定义数据元素
//typedef int ElementType
typedef struct{
    int id;
    char *name;
}ElementType;

//2、定义顺序表结构
typedef struct{
    ElementType datas[MAX_SIZE];    //顺序表中数据元素集合
    int length;                     //当前顺序表中元素个数
}SeqList;
#endif // DATAELEMENT_H_INCLUDED

SequenceList.h 相应的函数声明

#ifndef SEQUENCELIST_H_INCLUDED
#define SEQUENCELIST_H_INCLUDED

#include <stdio.h>
#include <stdlib.h>
#include "DataElement.h"
/**
 * 初始化顺序表
 * @param seqList   初始化的顺序表
 * @param elemArray 初始化时要添加的元素内容数组
 * @param length    初始化时添加的元素个数
 */
void InitList(SeqList *seqList, ElementType *elemArray, int length);


/**
 * 向顺序表中的Index下标处插入某个元素
 * @param seqList
 * @param index     要插入的下标
 * @param element   要插入的元素
 */
//顺序表初始化
void InsertElement(SeqList *seqList, int index, ElementType element);

//打印顺序表
void PrintList(SeqList *seqList);

#endif // SEQUENCELIST_H_INCLUDED

#include "SequenceList.h"

/**
 * 初始化顺序表
 * @param seqList   初始化的顺序表
 * @param elemArray 初始化时要添加的元素内容数组
 * @param length    初始化时添加的元素个数
 */
void InitList(SeqList *seqList, ElementType *elemArray, int length)
{
    if(length > MAX_SIZE)
    {
        printf("超出最大容量,初始化失败\n");
    }
    seqList->length = 0;
    for(int i = 0; i < length; i++)
    {
        //每次循环都在下标为i的位置插入一个元素
        InsertElement(seqList, i, elemArray[i]);
    }
}

/**
 * 向顺序表中的Index下标处插入某个元素
 * @param seqList
 * @param index     要插入的下标
 * @param element   要插入的元素
 */
//顺序表初始化
void InsertElement(SeqList *seqList, int index, ElementType element)
{
    //1、验证插入后的元素空间是否超过MAX_SIZE
    //2、index的值是否合法[0, MAX_SIZE-1]
    //3、插入的index应该在length之内
    //4、从第length-1个下标开始,前一个元素赋值给后一个元素

    if(seqList->length + 1 >= MAX_SIZE)
    {
        printf("数组已满,插入失败\n");
        return ;
    }
    if(index < 0 || index > MAX_SIZE-1)
    {
        printf("只能在允许的下标范围内插入元素[0, %d]\n", MAX_SIZE-1);
        return ;
    }
    if(index > seqList->length)
    {
        printf("插入的下标超过数组最大长度-1,失败\n");
    }
    for(int i = seqList->length-1; i >= index; i--)
    {
        seqList->datas[i+1] = seqList->datas[i];
    }
    //5、将要插入的值赋给第index个元素
    seqList->datas[index] = element;
    //6、顺序表长度加一
    seqList->length++;

}

void PrintList(SeqList *seqList)
{
    for(int i = 0; i < seqList->length; i++){
        printf("%d\t%s\n", seqList->datas[i].id, seqList->datas[i].name);
    }
}

当只调用#include "DataElement.h"时,能够运行但是DataElement.h中并没有调用SequenceList.h,我这里会报错,但是教学视屏中可以的。待解决

#include <stdio.h>
#include <stdlib.h>
//#include "DataElement.h"
#include "SequenceList.h"

using namespace std;

ElementType dataArray[] = {
    {1, "qs"},
    {2, "ss"},
    {3, "xs"},
    {4, "ds"},
};
void TestSequenceList();

int main(int argc, char *argv[])
{
    TestSequenceList();
    return 0;
}

void TestSequenceList()
{
    SeqList seqList;    //要操作的顺序表
    InitList(&seqList, dataArray, sizeof(dataArray) / sizeof(dataArray[0]));
    PrintList(&seqList);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值