【发布时间】:2018-03-30 21:15:21
【问题描述】:
我尝试转发声明 std::string 但它似乎不起作用。
这是我的代码:
namespace std
{
template<typename>
class allocator;
template<class _CharT>
struct char_traits;
template <typename _CharT, typename _Traits = char_traits<_CharT>, typename _Alloc = allocator<_CharT>>
class basic_string;
typedef basic_string<char> string;
}
包含字符串会导致此错误:reference to ‘basic_string’ is ambiguous。有没有什么方法可以让 decleare 字符串没有错误?
【问题讨论】:
-
不允许在
std内转发声明名称 -
不,see this 关于为什么这是不可能的,以及为什么会出现此错误。
-
哦。好吧,当我包含“bits/stringfwd.hpp”时,它在 gcc 中工作,因此我认为我可以做到。
-
@DasOhmoffSan 作为一般规则,您永远不应该为您不拥有的类型编写前向声明。如果您想从库中转发声明某些内容,您希望库编写者为您提供转发声明文件,类似于标准库提供的
iosfwd标头
标签: c++ string forward declare