将'WhatEver'重新定义为不同类型的符号
redefinition of 'WhatEver' as different kind of symbol
我正在尝试将一些遗留代码迁移到一个较新的项目中,但我并没有真正修复这个问题。代码在旧环境中编译并运行良好。
我有一个包含这些定义的头文件:
std::string ToString(shared_ptr<const SomeObject> obj);
std::string ToString(SomeObject* obj);
以及包含以下行的实现文件:
using namespace std;
string ToString(shared_ptr<const SomeObject> obj)
{
// code cut
return outstring.str();
}
string ToString(SomeObject* obj)
{
// code cut
return outstring.str();
}
我正在尝试用clang
编译它,但出现以下重定义错误:
.../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);
为什么它被重新定义为不同类型的符号?我应该如何解决这个问题?最后但并非最不重要的一点是,为什么它适用于较旧的编译器?
检查是否声明了string
和shared_ptr
,并尝试为它们指定命名空间(将shared_ptr
替换为 boost::shared_ptr
或 std::shared_ptr
),以确保在声明和实现ToString
时使用相同的类。
相关文章:
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 将超出范围的整数分配给有符号字符类型
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 类型的大小与无符号的等效项?
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 应用于无符号类型的一元减号运算符
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 在有符号基础类型枚举的位域上溢出
- C++,概念不适用于无符号整数作为结果类型?
- 函数指针给我"重新声明为不同类型的符号"错误
- 为什么 (-i) 的类型(其中 i 是无符号的 int)仍然是无符号的 int?
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 这种错误的原因是什么:将"功能"重新定义为不同类型的符号
- 为什么C++数组索引值是有符号的,而不是围绕size_t类型构建的(或者我错了)
- 什么是 16 字节有符号整数数据类型?
- 无符号类型和C++
- C++和无符号类型
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 重写基于模板类型符号的虚拟方法