当前位置: 技术问答>linux和unix
做一个小工程报重复定义错误怎么解决啊?
来源: 互联网 发布时间:2016-07-17
本文导语: 连接时报这个错误 /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中...
连接时报这个错误
/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里面。
然后哪个文件用到它就包含这个头文件。
为什么两个文件编译后就连接不了呢?
/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里面。
然后哪个文件用到它就包含这个头文件。
为什么两个文件编译后就连接不了呢?
|
变量定义不能放到头文件里,只能放在源文件里,然后在头文件里用extern int shm_id声明,这样就不会有错了
|
public.cpp
public.h
int shm_id;
public.h
extern int shm_id;
|
基本的C语言不过关啊你,
声明放头文件,
变量定义放源文件,
所以
typedef struct node
{
...
...
}OPER_NODE; 放在头文件
OPER_NODE* pOper_Node; 放源文件
声明放头文件,
变量定义放源文件,
所以
typedef struct node
{
...
...
}OPER_NODE; 放在头文件
OPER_NODE* pOper_Node; 放源文件