学习时出现的一个无厘头的问题,虽然可以解决,但是我好奇极了。
例:构建顺序表 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);
}