c++ - C++中同一函数的多个定义
问题描述
我正在为神经网络编写一个库。我需要一些必要的功能,所以我将它们分隔在一个单独的头文件中。我还提供了定义守卫。我还将头文件仅包含在一个文件中,但链接器还声称程序中的所有函数都有多个定义。库结构如下:
namespace maya:
class neuron [neuron.hpp, neuron.cpp]
class ffnet [ffnet.hpp, ffnet.cpp]
struct connection [connection.hpp]
functions [functions.hpp]
函数头文件是这样写的:
#ifndef FUNCTIONS_HPP
#define FUNCTIONS_HPP
// some functions here
double random_double(){//some code}
#endif
这个functions.hpp文件只包含在neuron.hpp中,因为ffnet依赖于神经元,所以我只在ffnet中包含了neuron.hpp一次。此 ffnet.hpp 仅包含在 main.cpp 中一次。main.cpp 是我用来测试我的库的文件。
这个链接器会抛出类似这样的错误:
/usr/bin/ld: /tmp/ccN7ywby.o: in function `maya::random_double()':
neuron.cpp:(.text+0x0): multiple definition of maya::random_double()'; /tmp/ccvDr1aG.o:main.cpp:(.text+0x0): first defined here
/usr/bin/ld: /tmp/cc66mBIr.o: in function `maya::random_double()':``
ffnet.cpp:(.text+0x0): multiple definition of `maya::random_double()'; /tmp/ccvDr1aG.o:main.cpp:(.text+0x0): first defined here
我还使用以下方法编译了我的程序:
g++ main.cpp neuron.cpp ffnet.cpp -o net
我认为这不是必需的,但以防万一:
$ uname -a
Linux brightprogrammer 4.19.0-kali3-amd64 #1 SMP Debian 4.19.20-1kali1 (2019-02-14) x86_64 GNU/Linux
解决方案
您必须在 .cpp 文件中编写代码,random_double()
而不是 .hpp 或 .h 文件。或者,如果您将代码保存在 .hpp 文件中,请在inline
之前添加。double random_double() { //some code }
推荐阅读
- php - 如何使用 php 将 API 中的数据图像保存在服务器上?
- asp.net - 将 varchar 转换为 datetime 数据类型
- node.js - 如何从 Sendgrid 响应中获取嵌入动态参数的渲染模板?
- html - 当通过 Ctrl+A 清除值并且上一个值与假设为新值相同时,角度输入框值未从 ngModelChange 事件更新
- python - 用 Python 在图像上编写乌尔都语文本
- ui-automation - Blue Prism 使用 UI 自动化识别:2 个同名编辑字段
- java - 生产者可以拥有相同的 clientId 并发布到 Artemis 中的主题吗?
- python - 当可迭代包含数百万个元素时,是否有 zip(*iterable) 的替代方法?
- r - 如何动态提取子字符串
- architecture - 这是 UML 图吗?