全局函数的使用

本文详细解析了在C++开发中遇到全局函数重复定义错误的原因,并提供了有效的解决方法,包括如何正确地在头文件中加入宏保护以及如何合理地组织.cpp文件和头文件之间的引用关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用方法:

在".h"里声明
unsigned int hash(const void *key, int len);
在".cpp"里实现
unsigned int hash(const void *key, int len)
{
       ....
}
错误使用:

   将全局函数的定义放到.h文件中,且头文件没有宏保护。

  /*******************HashTable.h****************/

unsigned int hash(const void *key, int len)
{
       ....
}

   则g++在编译过程中报hash()函数重复定义(multiple definitionof)的错误,原因如下:

当HashTable.h 被同一 .cpp文件多次引用时(可能是间接多次引用),编译生成相应的 .o 文件,链接时候会报 hash函数重复定义。
一个可能想到的方法是在头文件中加入宏定义,防止头文件被重复引用,如:

/*******************HashTable.h****************/

#ifndef _HASH_TABLE_H_INC
#define _HASH_TABLE_H_INC
unsigned int hash(const void *key, int len)
{
       ....
}
#endif

如果你只有一个 .cpp文件,你可能得到一个可以运行的程序。但如果你有两个或以上的 .cpp 文件引用 HashTable.h ,链接时仍会报hash函数重复定义错误。

解决办法:

    将全局函数声明放到.h文件中,将定义放到cpp中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值