0
我试图将一些遗留代码迁移到一个较新的项目中,但我并没有真正弄清楚这个问题。代码在旧环境中编译和运行良好。重新定义'WhatEver'作为不同类型的符号
我有一个包含这些定义一个头文件:
std::string ToString(shared_ptr<const SomeObject> obj);
std::string ToString(SomeObject* obj);
而且具有以下几行实现文件:我试图用clang
编译它
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);
为什么它是redefin ition作为不同种类的符号?我应该如何解决这个问题?最后但并非最不重要的是,为什么它可以与较老的编译器一起工作?
您能提供一个最小的测试用例来重现问题吗? – juanchopanza
不幸的是,框架是巨大的: - \ – tamasgal
太糟糕了。祝你好运! – juanchopanza