Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量多定义链接错误_C++_Vector_Multiple Definition Error - Fatal编程技术网

C++ 向量多定义链接错误

C++ 向量多定义链接错误,c++,vector,multiple-definition-error,C++,Vector,Multiple Definition Error,矢量仅包含在一个源文件中。头文件中唯一包含的stl是字符串。但我无法消除多个定义错误(下面的示例)。有什么想法吗 /plugin_dfb.o:mipsel linux uclibc/include/c++/4.2.0/bits/stl_bvector.h:182:std::operator-(std:_Bit_iterator_base const&,std:_Bit_iterator_base const&)的多重定义 /painter.o:mipsel-linux-uclibc/includ

矢量仅包含在一个源文件中。头文件中唯一包含的stl是字符串。但我无法消除多个定义错误(下面的示例)。有什么想法吗

/plugin_dfb.o:mipsel linux uclibc/include/c++/4.2.0/bits/stl_bvector.h:182:std::operator-(std:_Bit_iterator_base const&,std:_Bit_iterator_base const&)的多重定义
/painter.o:mipsel-linux-uclibc/include/c++/4.2.0/bits/stl_bvector.h:182:首先在这里定义

您是否尝试过使用一次pragma?

我认为您只在一个头文件中包含向量,但该头文件没有#define块,这导致了对其中包含的向量头文件的重新定义。 请在下面给出的模板中附上您的include文件,然后重试

 #if !defined(HEADER_FILE) 
 #define HEADER_FILE
 // Your code
 #endif

在链接过程中出现的问题似乎与模板实例化有关。给定实例化实现细节,模板函数/定义应放在公共包含文件中,以确保它们在任何地方都可见,并且不会重复此处可能出现的标题包含


从您所发布的内容来看,这个问题与运算符有关,它可能由std::distance()使用,而std::distance()可以从find()类型的函数中调用。因此,请查看是否定义或调用了此类函数,因为它们可能与向量和字符串一起工作,并确保它们位于共享头文件中。

此std::operator-是带有外部链接的内联函数。链接器似乎不支持此类内联函数的多个定义。但是C++的“一个定义规则”显然允许这样做。通常,这样的符号会得到“弱链接”(GNU术语),但我认为对象文件格式和链接器都需要支持这一点

我会尝试在专门针对您平台的群组/邮件列表中提出一个问题。沿着“X平台支持C++的链接和C++相关的一个定义函数,用于内联函数和模板”的一些东西?
您可能还想查看GCC文档。他们可能会提供一个命令行开关作为解决方案。如果您还没有使用g++作为链接器的前端,那么应该尝试一下。也许这也有帮助。

它通常更像是C/C++中的
#ifndef HEADER\u FILE\u H
#define HEADER\u FILE\u H
#endif
,所有的头文件都使用了“#pragma once”