未解决的外部错误



我有以下.h和.cpp文件

如果必须的话,我会包括功能定义的完整代码

当我编译我的程序时,我会在的末尾显示错误

hash.h

    #define BUCKETS 64
       #define B_ENTRIES 50000
       int curr_tanker;
       typedef unsigned long int ulong;
typedef struct bucket
{
    int bucket_id;
    ulong bucket_entries;
}bucket;
typedef struct tanker_record
{
    ulong tanker_id;
    ulong tanker_size;
    ulong num_of_entries;
    ulong bucket_entry_count;
   }tanker_record;
typedef struct fpinfo
{ 
    unsigned long chunk_offset;
    unsigned long chunk_length;
    unsigned char fing_print[33];
}fpinfo;
struct fpinfo* InitHTable(fpinfo *);
int CreateTanker(tanker_record tr[]);
int Hash_CreateEntry(struct fpinfo *,struct fpinfo he,tanker_record tr);

ht.cpp

#include <stdlib.h>
#include <string.h>
#include<stdio.h>
#include <iostream>
#include "ht.h"
struct fpinfo* InitHTable(struct fpinfo ht[][B_ENTRIES])
{
}
int CreateTanker(tanker_record tr[])
{
}
int
Hash_CreateEntry(struct fpinfo *t[][B_ENTRIES],struct fpinfo he,tanker_record tr[])
{
}
static void
WriteHTtoFile(struct fpinfo *t[][B_ENTRIES],int this_tanker)
{
}

main.cpp

#include<iostream>
#include"ht.cpp"
#include<conio.h>
#include<stdlib.h>
void main(int argc, char **argv)
{
static fpinfo hash_table[BUCKETS][B_ENTRIES];
static tanker_record tr[100];
InitHTable(&hash_table[0][0]);
CreateTanker(tr);
struct fpinfo fp;
... 
ar = Hash_CreateEntry(&hash_table[0][0], fp,tr[0]);

当我尝试使用vc2010 编译它时,我得到了以下错误

1> main.obj:错误LNK2005:"struct fpinfo*__cdecl InitHTable(struct fpinfo(*const)[5000])"(?InitHTable@@YAPAUFinfo@@QAY0MDFA@U1@@Z) 已在ht.obj 中定义

1> main.obj:错误LNK2005:"int __cdecl CreateTanker(struct-tanker_record*const)"(?CreateTanker@@YAHQAUtanker_record@@@Z)已在ht.obj 中定义

1> main.obj:错误LNK2005:"int __cdecl Hash_CreateEntry(struct fpinfo*(*const)[5000],struct fpinfo,struct tanker_record*const@@YAHQAY0MDFA@PAUfpinfo@@U1@QAUtanker_record@@@Z) 已在ht.obj中定义1> main.obj:错误LNK2005:ht.obj中已定义"int curr_tanker"(?curr_tanker@@3HA)1> main.obj:错误LNK2019:未解析的外部符号"int __cdecl Hash_CreateEntry(struct fpinfo*,struct fpinfo,struct tanker_record)"(?Hash_CreateEntry@@YAHPAUfpinfo@@U1@Utanker_record@@@Z) 在函数_main中引用1> main.obj:错误LNK2019:函数_main 中引用了未解析的外部符号"struct fpinfo*__cdecl InitTable(struct fpinfo*)"(?InitTable@@YAPAUFinfo@@PAU1@@Z)

谢谢你的帮助!!

您包含了main.cpp中的ht.cpp,它将包含ht.cpp本身中已经定义的函数的所有定义。

您希望包含ht.h

在这种情况下,它不会有帮助,但您也应该使用include guards来保护头文件:

#ifndef HT_H
#define HT_H
// contents of ht.h
#endif

您还需要函数声明的参数与定义的参数相匹配:

struct fpinfo* InitHTable(struct fpinfo[][B_ENTRIES]);
// Missing:                              ^^^^^^^^^^^
int CreateTanker(tanker_record tr[]); // OK
int Hash_CreateEntry(struct fpinfo*[][B_ENTRIES],struct fpinfo,tanker_record[]);
// Missing                         ^^^^^^^^^^^^^                            ^^

在标头中添加一个"include-guard",这样在预处理后其内容就不会被"看到"两次。对于Microsoft,#pragma once位于.h文件的开头。一般情况下,添加:

#ifndef __YOUR_HEADER_H
#define __YOUR_HEADER_H
// all the stuff from the header here
#endif

请确保为每个标头采用一致的"唯一"命名方案。__YOUR_HEADER_H可以将例如customio.h转换为__CUSTOM_IO_H

相关内容

  • 没有找到相关文章

最新更新