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)*

WindowsXP32ビットの仮想マシンで作業しています。

編集:申し訳ありませんが、質問を書くときにファイルの名前をcola.hからqueue.hに変更しましたが、#includeが正しく、エラーが発生しています。

4

2 に答える 2

3

そして、実際に作成されたオブジェクトファイルとリンクqueue.cppしていますか?メインコードにヘッダーファイルをインクルードするだけでは不十分です。実行可能ファイルを作成するときに、メインコードとキューコードの両方をリンクする必要があります。

そして、余談ですが、はるかに優れた、はるかに近代的で、ちょうど安いオプションが利用できるのに、なぜそのような古風なC実装を使用しているのですか?


Turbo Cに複数のソースファイルをコンパイルさせるには、プロジェクトを作成してから、そのプロジェクトにCファイルを追加する必要があると思います。次に、プロジェクト内のすべてのソースファイルをコンパイルしてリンクする必要があることがわかります。

ソースファイルが1つしかない(プロジェクトがない)場合は、そのファイルだけを含むプロジェクトとして扱われます。

于 2011-03-13T00:44:45.307 に答える
0

「queue.h」を含めたとのことです#include "queue.h"が、関連するファイルのどこにも表示されません。

于 2011-03-13T00:53:09.043 に答える