C++ 重新定义';不管怎样';作为一种不同的符号

C++ 重新定义';不管怎样';作为一种不同的符号,c++,clang,redefinition,C++,Clang,Redefinition,我正在尝试将一些遗留代码迁移到一个较新的项目中,但我并没有真正修复这个问题。代码在较旧的环境中编译并运行良好 我有一个包含以下定义的头文件: std::string ToString(shared_ptr<const SomeObject> obj); std::string ToString(SomeObject* obj); 为什么它被重新定义为不同的符号?我该如何解决这个问题?最后但并非最不重要的一点是,为什么它能与较旧的编译器一起工作?检查是否声明了string和share

我正在尝试将一些遗留代码迁移到一个较新的项目中,但我并没有真正修复这个问题。代码在较旧的环境中编译并运行良好

我有一个包含以下定义的头文件:

std::string ToString(shared_ptr<const SomeObject> obj);
std::string ToString(SomeObject* obj);

为什么它被重新定义为不同的符号?我该如何解决这个问题?最后但并非最不重要的一点是,为什么它能与较旧的编译器一起工作?

检查是否声明了
string
shared\u ptr
,并尝试为它们指定名称空间(将
shared\u ptr
替换为
boost::shared\u ptr
std::shared\u ptr
)为了确保在
ToString

的声明和实现中使用相同的类,您可以提供一个最小的测试用例来再现问题,并包含所有必需的包含项吗?不幸的是,该框架非常庞大:-\n太糟糕了。祝你修好它!我们不需要你的框架。相反,我们需要你做一些工作。复制您的框架。删除东西——首先要弄清楚如何编译一个文件并得到错误。现在删除文件中您认为对bug不重要的部分。重新编译并获得相同的错误(如果不是,回滚——使用源代码管理使回滚成为可能)。重复操作,直到代码变小,错误仍然存在。@septi这两个错误是您得到的唯一错误吗?确保声明了
string
shared_ptr
,并尝试为它们指定名称空间(将
shared_ptr
替换为
boost::shared_ptr
std::shared_ptr
)。
using namespace std;

string ToString(shared_ptr<const SomeObject> obj)
{
  // code cut
  return outstring.str();
}

string ToString(SomeObject* obj)
{
  // code cut
  return outstring.str();
}
.../Filename.cxx:15:8: error: redefinition of 'ToString' as different
      kind of symbol
string ToString(shared_ptr<const SomeObject> obj)
       ^
.../Filename.h:15:13: note: previous definition is here
std::string ToString(SomeObject* obj);