请高手帮忙!!!谢谢
一个a.h文件
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
#include <stdio.h>
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
struct link
{
double value;
link* next;
};
//--------------------------------全局变量---------------------------------------//
link * head[2];
double average_val;
//-------------------------------------------//
double average(link* nod,double counter);
double deviation(link* nod,double counter);
bool addnode(link* nod,double val);
bool removenode(link* nod,double val);
link *nextnode(double val);
link *priornode(double val);
void print();
#endif
一个b.cpp文件实现了a.h中的函数,
#include "global.h "
using namespace std;
double average(link* nod,double counter)
{
double sum=0;
for(link* p=nod;p!=NULL;)
{
if(p!=head[0])
{
cout < < "请传递链表的头结点 " < <endl;
cin.get();
exit(1);
}
else
{
sum=sum+p-> value;
p=p-> next;
}
}
average_val=sum/counter;
return average_val;
}
double deviation(link* nod,double counter)
{
double sum=0;
double temp=0;
link* p=nod;
while(p!=NULL)
{
temp=(p-> value-average_val)*(p-> value-average_val);
sum=sum+temp;
p=p-> next;
}
sum=sum/counter-1;
return sqrt(sum);
}
bool addnode(link* nod,double val)
{
if(nod!=head[1])
{
cout < < "请传递链表的末节点 " < <endl;
return false;
}
else
{
link* temp=(link*)malloc(sizeof(link));
nod-> next=temp;
temp-> value=val;
temp-> next=NULL;
return true;
}
}
bool removenode(link* nod,double val)
{
link* p1;
link* p2;
if(nod!=head[0])
{
cout < < "请传递链表的头结点 " < <endl;
cin.get();
return false;
}
else
{
if(nod-> value==val)
{
head[0]=nod-> next;
}
else
{
p1=nod;
while(p1-> value!=val)
{
p2=p1;
p1=p1-> next;
}
p2=p1-> next;
}
return true;
}
}
link* nextnode(double val)
{
link* p1;
p1=head[0];
while(p1-> value!=val&&p1!=NULL)
{
p1=p1-> next;
}
return p1;
}
link* priornode(double val)
{
link* p1;
link* p2;
if(val==head[0]-> value)
return head[0];
else
{
p1=head[0];
p2=p1;
while(p1-> value!=val&&p1!=NULL)
{
p2=p1;
p1=p1-> next;
}
return p2;
}
}
void print()
{
for(link* p=head[0];p!=NULL;p=p-> next)
cout < <p-> value < <endl;
}
一个c.cpp文件
#include“a.h "
然后抱错为:
test error LNK2005: "struct link * * head " (?head@@3PAPAUlink@@A) 已经在 maketure.obj 中定义
test error LNK2005: "double average_val " (?average_val@@3NA) 已经在 maketure.obj 中定义
请高手帮帮我,谢谢了
我该怎么改呢
[解决办法]
很简单,因为你的变量定义在.h文件中,link * head[2];而在两个.cpp中include 这个.h文件,所以link * head[2];有两份定义.函数实现也是一样,解决办法,不要在.h文件中定义函数和变量,只声明.
[解决办法]
也就是在.h中加上extern link* head[2]; extern double average_val;(声明)
再在c.cpp中加上link* head[2]; double average_val;(定义)
[解决办法]
//--------------------------------全局变量---------------------------------------//
link * head[2];
double average_val;
//-------------------------------------------//
变量定义放在b.cpp文件中,而不要放在.h头文件中
a.h头文件中用extern声明变量.
//--------------------------------全局变量---------------------------------------//
extern link * head[2];
extern double average_val;
//-------------------------------------------//
[解决办法]
看看先 ~
[解决办法]
你在.h文件中定义函数和变量
可以在.h面声明
[解决办法]
方法一:
a.h头文件中用extern声明变量.
//--------------------------------全局变量---------------------------------------//
extern link * head[2];
extern double average_val;
//-------------------------------------------//
然后在 main 所在的源文件中,
定义:
link * head[2];
double average_val;
[解决办法]
把你在a.h中的两个全局变量改为 extern声明,而在b.cpp里定义,这样就可以避免重复定义的问题.
也就是:
a.h
//--------------------------------全局变量---------------------------------------//
extern link * head[2];
extern double average_val;
//-------------------------------------------//
b.cpp
double average_val; //重新写一遍,因为是全局的,所以自动有初值
link * head[2];
[解决办法]
okokok
[解决办法]
一个b.cpp文件实现了a.h中的函数,
#include "global.h " // or a.h ??
[解决办法]
路过