首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于“ multiple definition of `generate(int, DLList)'”,该如何解决

2013-10-06 
关于“ multiple definition of `generate(int, DLList)'”写了三个文件:一个.h,两个cppdllist.h:class

关于“ multiple definition of `generate(int, DLList)'”
写了三个文件:一个.h,两个cpp
dllist.h:
class DLLElement {
public:
DLLElement( void *itemPtr, int sortKey ); // initialize a list element

 DLLElement *next; // next element on list 
// NULL if this is the last 
DLLElement *prev; // previous element on list 
// NULL if this is the first


 int key; // priority, for a sorted list 
void *item; // pointer to item on the list 
}; 

class DLList {

public:
DLList(); // initialize the list 
~DLList(); // de-allocate the list

 void Prepend(void *item); // add to head of list (set key = min_key-1) 
void Append(void *item); // add to tail of list (set key = max_key+1) 
void *Remove(int *keyPtr); // remove from head of list 

// set *keyPtr to key of the removed item 
// return item (or NULL if list is empty)

 bool IsEmpty(); // return true if list has elements


 // routines to put/get items on/off list in order (sorted by key) 
void SortedInsert(void *item, int sortKey); 
void *SortedRemove(int sortKey); // remove first item with key==sortKey 


// return NULL if no such item exists 

private:
DLLElement *first; // head of the list, NULL if empty 
DLLElement *last; // last element of the list, NULL if empty 

};

dllist.cc:
extern "C" {
#include <assert.h>

#define ASSERT(expression)  assert(expression)
}

#include <iostream>
#include "dllist.h"
using namespace std;

DLLElement::DLLElement(void *itemPtr, int sortKey )
{
item=itemPtr;
key=sortKey;
next=prev=NULL;
}


DLList::DLList()
{
first=NULL;
last=NULL;
}

DLList::~DLList()
{
DLLElement *p,*q;
q=p=first;
while(p!=NULL)
{
q=p->next;
delete[]p;
p=q;
}
}

void DLList::Prepend(void *item)
{
DLLElement *q;
q=first;
q->prev=(DLLElement *)item;
((DLLElement *)item)->next=q;
((DLLElement *)item)->prev=NULL;
((DLLElement *)item)->key=q->key-1;
first=(DLLElement *)item;
}

void DLList::Append(void *item)
{
DLLElement *q;
q=last;
q->next=(DLLElement *)item;
((DLLElement *)item)->prev=q;
((DLLElement *)item)->next=NULL;
((DLLElement *)item)->key=last->key+1;
last=(DLLElement *)item;
}


bool DLList::IsEmpty()
 {
 if(last==first)
 return 0;
 else
 return 1;
 }

void * DLList::Remove(int *keyPtr)
{
DLLElement *q,*p;
p=first;
if(!p)
return NULL;
else
{
keyPtr=&p->key;
q=first->next;
p->next=NULL;
q->prev=NULL;
first=q;
return p;
}
}

void DLList::SortedInsert(void *item, int sortKey)
{
DLLElement *p,*q;
p=first;
q->item=item;
q->key=sortKey;
while(p!=NULL)
{
if(sortKey>=p->key)
p++;
else
{
if((p!=first)&&(p!=last))
{
p->prev->next=q;
q->prev=p->prev;
q->next=p;
p->prev=q;
}
else if(p==first)
{
p->prev=q;
q->next=p;
q->prev=NULL;
first=q;
}
else
{
p->next=q;
q->prev=p;
q->next=NULL;
last=q;
}
}
}
}
 
void * DLList::SortedRemove(int sortKey)
{
DLLElement *p;
p=first;
while(p!=NULL)
{
if(p->key==sortKey)
{
if((p!=first)&&(p!=last))
{
p->prev->next=p->next;
p->next->prev=p->prev;
}
else if(p==first)
{
p->next=first;
p->next->prev=NULL;
}
else
{
p->prev=last;
p->prev->next=NULL;
}
return p;
}
else
p++;
}
if(p==NULL)
return NULL;
}
 
dllist-driver.cc:
#include "dllist.h"
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

void generate(int n,DLList m)
{
int i,keyword,*it;
//DLLElement *q;


srand((unsigned)time(0));
for(i=0;i<n;i++)
{
keyword=rand()%n;
it=&keyword;
//DLLElement *p=new DLLElement(,keyword);
m.SortedInsert(it,keyword);
}
}

void move(int n,DLList m)
{
int i,*keyPtr;
for(i=0;i<n;i++)
{
cout<<m.Remove(keyPtr)<<endl;
}
}

int main()
{
int a;
DLList u;
printf("请输入队列元素个数:\n");
scanf("%d",&a);
generate(a,u);
move(a,u);
return 0;
}

在最终编译时出现错误:
D:\MinGWStudio\MinGW\lib\lianbiao\Debug\dllist-driver.o: In function `Z8generatei6DLList':D:\MinGWStudio\MinGW\lib\lianbiao\dllist-driver.cpp:11: multiple definition of `generate(int, DLList)'
D:\MinGWStudio\MinGW\lib\lianbiao\Debug\dllist-driver.o:D:\MinGWStudio\MinGW\lib\lianbiao\dllist-driver.cpp:11: first defined here
D:\MinGWStudio\MinGW\lib\lianbiao\Debug\dllist-driver.o: In function `Z4movei6DLList':D:\MinGWStudio\MinGW\lib\lianbiao\dllist-driver.cpp:31: multiple definition of `move(int, DLList)'
D:\MinGWStudio\MinGW\lib\lianbiao\Debug\dllist-driver.o:D:\MinGWStudio\MinGW\lib\lianbiao\dllist-driver.cpp:31: first defined here
D:\MinGWStudio\MinGW\lib\lianbiao\Debug\dllist-driver.o: In function `main':D:\MinGWStudio\MinGW\lib\lianbiao\dllist-driver.cpp:40: multiple definition of `main'
D:\MinGWStudio\MinGW\lib\lianbiao\Debug\dllist-driver.o:D:\MinGWStudio\MinGW\lib\lianbiao\dllist-driver.cpp:40: first defined here
collect2: ld returned 1 exit status

也查找了网上的一些资料,但是可能是不会修改,还是有错,只能贴上一群代码,求助大牛们…… c++
[解决办法]
generate、 move 重名了。
cstdlib库中有同名函数,最好改下名字.
[解决办法]
另main不该有多处同名的,

//dllist-driver.cc:
如果你有多处引用的话,最好加上名字空间,并且加上
#ifndef dllist-driverCC
#define dllist-driverCC

.....你的代码,

#endif
[解决办法]
你注释掉generate、 move两个函数的定义,
用 CTRL + 鼠标左键 , 点调用generate函数的地方,这时IDE会查找该函数的头文件。

热点排行