Я пишу библиотеку для нейронных сетей.Есть некоторые необходимые функции, которые мне нужны, поэтому я выделил их в отдельный заголовочный файл.Я также предоставил определение охранникам.Я также включил заголовочный файл только в один файл, но затем компоновщик утверждает, что в программе есть несколько определений всех функций.Структура библиотеки выглядит следующим образом:
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 зависит от нейрона, я включил neuron.hpp в ffnet только один раз.Этот 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