我们的遗留代码使用 RogueWave 库。我正在尝试从 0 文字构造一个 RWTime 对象。但是,我所做的任何事情似乎都没有效果,编译器仍然有两个构造函数可供选择:
error: call of overloaded 'RWTime(int)' is ambiguous
_time(static_cast<unsigned long>(0))
^
note: candidates are:
RWTime::RWTime(const tm*, const RWZone&)
RWTime(const struct tm* ptm, const RWZone& zone = RWZone::local());
^
RWTime::RWTime(long unsigned int)
RWTime(unsigned long s)
^
constexpr RWTime::RWTime(const RWTime&)
class RW_DEPRECATE_TYPE("Use RWDateTime instead") RW_TOOLS_SYMBOLIC RWTime
^
constexpr RWTime::RWTime(RWTime&&)
我想使用unsigned long
构造函数,但我似乎无法真正传递 unsigned long。我试过了:
_time(static_cast<unsigned long>(0))
_time((unsigned long)0)
_time(0UL)
_time(0)
但没有效果。也许问题在于指针具有uintptr_t
类型,它与size_t
type 同义,而 type 与unsigned long
. 然后实际上有两个构造函数采用unsigned long
.
编辑:我检查了 RWTime 类文档,他们提到了这个问题:“编译器可以将 0 解析为整数或指针。因为还有一个构造函数需要一个指针 (to struct tm
),如果你想从值 0 ,unsigned long
您必须明确:
RWTime earlyTime((unsigned long)0);
但是,由于某种原因,它对我不起作用(使用 c++11)。