0

我正在 Turbo C++ 3.0 中编写我自己的结构数据类型的队列,我无法构建我的项目,因为 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 far )*

我正在使用 Windows XP 32 位的虚拟机工作。

编辑:对不起,我有一个错误,我在写问题时将文件从 cola.h 重命名为 queue.h,但 #include 是正确的并且存在错误。

4

2 回答 2

3

并且您实际上是否与生成的目标文件链接queue.cpp?仅在主代码中包含头文件是不够的,您必须在创建可执行文件时链接主代码和队列代码。

而且,顺便说一句,当有更好、更现代、更便宜的选项可用时,你为什么要使用这样一个古老的 C 实现?


为了使 Turbo C 编译多个源文件,我认为您必须创建一个项目,然后将 C 文件添加到该项目中。然后它将知道它必须编译和链接项目中的所有这些源文件。

如果您只有一个源文件(没有项目),它会将其视为只有该文件的项目。

于 2011-03-13T00:44:45.307 回答
0

#include "queue.h"你说你包括“queue.h”,但我在相关文件中看不到任何地方。

于 2011-03-13T00:53:09.043 回答