注册 登录
编程论坛 C++教室

请大家指教,多文件编译问题

zhouzhengbo 发布于 2007-05-01 21:10, 565 次点击
我在一个工程中加如了3个文件,分别 是table.h,table.cpp,main.cpp,头文件中定义了类,全局变量和函数声明,table.cpp中是函数实现,main.cpp是主函数,编译无错,连接出错, [Linker error] undefined reference to `fhead' 类的错误,意思应该是fhead未定义,但我
已用#include "table.h"将头文件包含了进来,为什么会出错呢?
4 回复
#2
yuyunliuhen2007-05-01 21:19

代码没贴上啊
可能是这个问题
#ifndef TABLE_H
#define TABLE_H

//some code

#endif

文件保存为table.h,试试看

#3
zhouzhengbo2007-05-01 21:34

谢谢,代码比较长我就没贴。
table.h
typedef struct node
{
float address;
float length;
struct node *next;
}free_table;

typedef struct lnode
{
char name;
float address;
float length;
struct lnode *next;
}used_table;

typedef struct pnode
{
free_table *ft;
struct pnode *next;
}view;

extern free_table *fhead;
extern used_table *uhead;
extern view *vhead;
const float minisize=100;
const float add=10240;
const float len=102400;
void insert(free_table *p);
void insert(used_table *p);
void insert(view *p);
void del(free_table *p);
void del(used_table *p);
void del(view *p);
void allocate(const char ,const float );
void reclaim(const char );
void display(void);

谢谢你!!

#4
未入流小菜鸟2007-05-03 21:38
全局变量不应该在头文件里定义,否则当头文件被多次包含时就会出现重复定义的编译错误。
不过你的代码是没问题的:
//table.h
extern free_table *fhead;
extern used_table *uhead;
extern view *vhead;
这是声明,不是定义。关键字extern意为该变量是在外部定义的,这里作一个声明而已。
所以你的table.cpp中还要去掉extern,真正定义一次才对。否则就出现未定义的错误了。
#5
zhouzhengbo2007-05-04 03:00

是的哦,多谢指正!

1