C++ 向量多定义链接错误
矢量仅包含在一个源文件中。头文件中唯一包含的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&)的多重定义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
/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”