ошибка множественного определения с использованием gnuplot

Я много читал о связывании ошибок здесь в stackoverflow, но я не знаю, где моя проблема.

main.cpp

#include "traffic.h"using namespace std;

int main(){
traffic t();
...
}

traffic.h

#ifndef _TRAFFIC
#define _TRAFFIC
#include "gnuplot.h"
using namespace std;

class traffic{

public:
int step;
Gnuplot gpl;
...
#endif

После того, как я сделал .o файлы, я хотел связать их все. Следующая ошибка происходит.

ракушка

g++ -o tr traffic.o main.o
main.o:(.bss+0x0): multiple definition of `Gnuplot::tmpfile_num'
traffic.o:(.bss+0x0): first defined here

и много других ошибок определения, касающихся Gnuplot.

gnuplot используется только в traffic.cpp

Мой вопрос: где моя ошибка?
Кстати: слишком мало информации, чтобы решить проблему?

1

Решение

Это прямо из gnuplot.h заголовок

//------------------------------------------------------------------------------
//
// initialize static data
//
int Gnuplot::tmpfile_num = 0;

Кажется плохой практикой инициализации статики в заголовочном файле, когда их следует выполнять только в файлах cpp, чтобы избежать дублирования определений.

В вашем случае вы можете исправить это, не включая gnuplot.h заголовок в любом из ваших заголовочных файлов, но только в файле cpp. Это повлечет за собой оборачивание всех вызовов функций заголовка gnuplot через оболочку, поскольку она не будет доступна ни в одном cpp, но в одном

0

Другие решения

использование #include "gnuplot.h" в файле cpp вместо header файл означает .h файл
тогда ваши файлы будут скомпилированы

0

По вопросам рекламы [email protected]