2014-02-15 33 views
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作为不同种类的符号?我应该如何解决这个问题?最后但并非最不重要的是,为什么它可以与较老的编译器一起工作?

+1

您能提供一个最小的测试用例来重现问题吗? – juanchopanza

+0

不幸的是,框架是巨大的: - \ – tamasgal

+0

太糟糕了。祝你好运! – juanchopanza

回答

2

如果检查stringshared_ptr声明,并尝试指定命名空间为他们(与boost::shared_ptrstd::shared_ptr更换shared_ptr),以确保同一个类中声明和实现的ToString使用。

相关问题