做一个小工程报重复定义错误怎么解决啊?

oyxiaoyu0 2009-11-21 09:16:02
连接时报这个错误
/usr/ccs/bin/ld: Duplicate symbol "shm_id" in files bank_console.o and public.o

文件public.h里定义
int shm_id;

文件public.cpp里面定义了函数用到这个变量所以public.cpp中写了#include "public.h"

然后文件bank_console.cpp中用到这个变量,在bank_console.h中包含#include "public.h"

g++ -c public.cpp没有问题,编译public.o文件
g++ -c bank_console.cpp也没有问题,编译出bank_console.o文件

可连接的时候
g++ -o bank_console bank_console.o public.o
怎么就报那么多重复定义呢?

正常我把公共函数写到public.cpp里实现,声明在public.h里面。
然后哪个文件用到它就包含这个头文件。
为什么两个文件编译后就连接不了呢?
...全文
149 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyxiaoyu0 2009-11-21
  • 打赏
  • 举报
回复
呵呵,谢谢了。小弟刚刚学。是有点基础不过关哦。
快乐田伯光 2009-11-21
  • 打赏
  • 举报
回复
基本的C语言不过关啊你,
声明放头文件,
变量定义放源文件,
所以
typedef struct node
{
...
...
}OPER_NODE; 放在头文件

OPER_NODE* pOper_Node; 放源文件

oyxiaoyu0 2009-11-21
  • 打赏
  • 举报
回复
那结构体定义呢?有一个公共结构体应该怎么定义,怎么extern啊。
我放到public.cpp下定义结构体
typedef struct node
{
...
...
}OPER_NODE;
OPER_NODE* pOper_Node;
然后public.h里面
extern OPER_NODE* pOper_Node;
为什么还报错误In file included from public.cpp:1:
public.h:23: error: syntax error before `*' token
快乐田伯光 2009-11-21
  • 打赏
  • 举报
回复
public.cpp

int shm_id;


public.h

extern int shm_id;

快乐田伯光 2009-11-21
  • 打赏
  • 举报
回复
变量定义不能放到头文件里,只能放在源文件里,然后在头文件里用extern int shm_id声明,这样就不会有错了

23,115

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧