使用gnuplot的多重定义错误

时间:2014-01-16 12:07:42

标签: c++ g++ 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

我的问题是:我的错误在哪里? 顺便说一句:是否有太少的信息来解决问题?

2 个答案:

答案 0 :(得分:0)

直接来自 gnuplot.h 标题

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

似乎是在头文件中初始化静态的一种不好的做法,当它们只应在cpp文件中完成时,以避免重复定义。

在您的情况下,您可以通过在任何头文件中不包含 gnuplot.h 标头来修复它,但只能在cpp文件中。这将需要通过包装器包装所有对gnuplot头函数的调用,因为它在任何cpp中都不可用,但在一个

答案 1 :(得分:0)

在cpp文件中使用#include "gnuplot.h"而不是header文件意味着.h文件 然后你的文件将被编译