【问题标题】:undefined symbol linker turbo c未定义的符号链接器 turbo c
【发布时间】:2011-03-13 00:41:32
【问题描述】:

我正在 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 是正确的并且存在错误。

【问题讨论】:

  • Turbo C 3.0 已经 20 年了。有更新更好的工具。

标签: c ide linker turbo-c


【解决方案1】:

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

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


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

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

【讨论】:

  • 如何在 Turbo C++ v 3.0 IDE 中链接这两个文件?
  • 哭笑不得!好吧,这是凭记忆,我必须一直到脑干才能得到这个,它早就移出了大脑小脑,还有很多乙醇那里一团糟:-)。您需要有一个项目,而不仅仅是一个文件。我会用详细信息更新答案。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多