gpt4 book ai didi

c++ - C++中同一函数的多个定义

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:14 25 4
gpt4 key购买 nike

我正在为神经网络编写一个库。我需要一些必要的功能,所以我将它们放在一个单独的头文件中。我还提供了守卫的定义。我还将头文件仅包含在一个文件中,但链接器还声称程序中的所有函数都有多个定义。库结构如下:

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
//一些函数在这里
double random_double(){//一些代码}
#endif

这个 functions.hpp 文件只包含在 neuron.hpp 中,因为 ffnet 依赖于神经元,所以我只将 neuron.hpp 包含在 ffnet 中一次。这个 ffnet.hpp 只包含在 main.cpp 中一次。 main.cpp 是我用来测试我的库的文件。

这个链接器会抛出这样的错误:
/usr/bin/ld:/tmp/ccN7ywby.o: 在函数 `maya::random_double()' 中:
neuron.cpp:(.text+0x0): maya::random_double()'的多重定义;/tmp/ccvDr1aG.o:main.cpp:(.text+0x0): 首先在这里定义

/usr/bin/ld:/tmp/cc66mBIr.o: 在函数`maya::random_double()':``
ffnet.cpp:(.text+0x0): `maya::random_double()' 的多重定义;/tmp/ccvDr1aG.o:main.cpp:(.text+0x0): 首先在这里定义

我还使用 :
编译了我的程序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

最佳答案

您必须将 random_double() 的代码写入 .cpp 文件中,而不是 .hpp 或 .h 文件。或者,如果您将代码保存在 .hpp 文件中,请在 double random_double() {//some code } 之前添加 inline

关于c++ - C++中同一函数的多个定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54956050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com