我在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
我的问题是:我的错误在哪里? 顺便说一句:是否有太少的信息来解决问题?
答案 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
文件
然后你的文件将被编译