C++ 类不是自身的基础
Posted
技术标签:
【中文标题】C++ 类不是自身的基础【英文标题】:C++ Class is not base of itself 【发布时间】:2012-07-09 08:01:12 【问题描述】:我不确定需要多少信息才能回答这个问题,如果需要更多信息,请告诉我。
我正在修改我写的一个大代码,当我突然遇到这条消息时:error: type 'integer' is not a direct base of 'integer'
。我知道这是一个继承问题,但我没有继承其他类。
导致这个问题的代码是
integer(const std::string & val, uint16_t base): integer(val.begin(), val.end(), base)
和
integer(iterator start, iterator end, uint16_t base)
已定义。
我需要做什么来解决这个问题?
编辑:我用 -std=c++0x 编译,根据答案,我应该能够编译,除非我的编译器是旧的:我认为 gcc 4.6.2
【问题讨论】:
更新答案,在 gcc 4.7 及以后版本中可用。 【参考方案1】:看起来您正试图直接调用另一个构造函数。你不能在 C++03 中做到这一点,但你 can do exactly that in C++11:
class SomeType int number; public: SomeType(int new_number) : number(new_number) SomeType() : SomeType(42) ;
您需要 g++ 4.7 或更高版本才能使用此功能,4.6 尚不支持此功能,即使使用 -std=c++0x,我在我的系统上测试了这两个版本。
【讨论】:
@calccrypto GCC 4.6 不支持这个。我认为是 4.7。【参考方案2】:不允许像这样调用同一class
的其他构造函数(C++11中有委托构造函数)。您需要初始化类的成员(就像您在其他构造函数中所做的那样)。
编辑:
根据C++0x/C++11 Support in GCC ,委托构造函数是在 GCC v4.7 中实现的
【讨论】:
【参考方案3】:您不能在不同构造函数的初始化列表中调用同一类的构造函数(在 C++03 中)。但是您可以相应地初始化成员:
integer(const std::string & val, uint16_t base): _start(val.begin())
_end(val.end())
_base(base)
【讨论】:
【参考方案4】:它是 not supported in g++-4.6(“委托构造函数 | N1986 | 否”),但 is supported in 4.7。
【讨论】:
以上是关于C++ 类不是自身的基础的主要内容,如果未能解决你的问题,请参考以下文章