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

请高手帮忙!多谢

2012-03-15 
请高手帮忙!!!谢谢一个a.h文件#ifndef_GLOBAL_H_#define_GLOBAL_H_#include stdio.h#include iostream

请高手帮忙!!!谢谢
一个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 ??
[解决办法]
路过

热点排行