C++类本身不是基础
C++ Class is not base of itself
本文关键字:C++ 更新时间:2023-10-16
我不确定需要多少信息来回答这个问题,所以告诉我是否需要更多信息。
当我突然遇到以下消息时,我正在修改我编写的一个大代码: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
看起来您正在尝试直接调用另一个构造函数。你不能在 C++03 中这样做,但你可以在 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,我在系统上使用两个版本都进行了测试。
不允许
的像这样调用相同class
的其他构造函数(C++11 中有委托构造函数)。您需要初始化类的成员(就像您在其他构造函数中所做的那样)。
编辑:
根据 C++0x/C++11 海湾合作委员会支持,委派构造函数是在 GCC v4.7 中实现
不能在不同构造函数的初始值设定项列表中调用同一类的构造函数(在 C++03 中)。但您可以相应地初始化成员:
integer(const std::string & val, uint16_t base): _start(val.begin())
_end(val.end())
_base(base)
{}
g++-4.6 不支持它("委派构造函数 | N1986 | 否"),但在 4.7 中受支持。
相关文章:
- 没有找到相关文章