我在Turbo C ++ 3.0中编写了我自己的struct数据类型的队列,我无法构建我的项目,因为TC在尝试链接它时会向我显示未定义符号的错误消息。
我有以下 queue.h 文件
#include <stdio.h>
struct pcb{
int *QueueBase;
char id;
int quantum;
};
typedef struct pcb far * ppcb;
typedef struct nodocola far * pnodocola;
struct nodocola{
ppcb a;
pnodocola ant;
};
void insertProcess(ppcb arg1);
ppcb getProcess();
我的文件 queue.cpp
#include<stdlib.h>
#include<stdio.h>
#include<cola.h>
struct pcb{
int *QueueBase;
char id;
int quantum;
};
typedef struct pcb far * ppcb;
typedef struct nodocola far * pnodocola;
struct nodocola{
ppcb a;
pnodocola ant;
};
pnodocola base = (pnodocola)malloc(sizeof(pnodocola*));
void insertProcess(ppcb arg1){
base->a = arg1;
pnodocola tmp = (pnodocola)malloc(sizeof(pnodocola*));
tmp = base;
base = (pnodocola)malloc(sizeof(pnodocola*));
base->ant = tmp;
}
ppcb getProcess(){
pnodocola tmp = (pnodocola)malloc(sizeof(pnodocola*));
tmp = base->ant;
base = tmp->ant;
return tmp->a;
}
我包含文件queue.h的文件:
#include<queue.h>
#include<dos.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
void interrupt myTimer(...);
void interrupt (*prev)(...);
ppcb actual = (ppcb)malloc(sizeof(ppcb*));
int ticks;
const quantum = 4;
void main()
{
clrscr();
prev=getvect(8);
setvect(8,myTimer);
getch();
disable();
setvect(8,prev);
enable();
}
void interrupt myTimer(...)
{
(*prev)();
}
void init(...)
{
actual->id='A';
actual->quantum = quantum;
insertProcess(actual);
}
错误:未定义的符号insertProcess(ppcb远)*
我正在使用Windows XP 32位的虚拟机工作。
编辑:对不起我有一个错误,当我写这个问题时,我将我的文件从cola.h重命名为queue.h,但是#include是正确的并且错误存在。
答案 0 :(得分:3)
你实际上链接与queue.cpp
生成的目标文件有关吗?仅在主代码中包含头文件是不够的,在创建可执行文件时必须链接主代码和队列代码。
而且,顺便说一下,为什么你会使用这样一个古老的C实现,当更好,更现代,更便宜的选项可用?
为了让Turbo C编译多个源文件,我认为您必须创建一个项目,然后将C文件添加到该项目中。然后它将知道它必须编译并链接所有项目中的那些源文件。
如果您只有一个源文件(没有项目),它会将其视为仅包含该文件的项目。
答案 1 :(得分:0)
您说您包含“queue.h”但我在相关文件中的任何位置都看不到#include "queue.h"
。