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 中受支持。

相关文章:
  • 没有找到相关文章