9

我不确定需要多少信息来回答这个问题,所以请告诉我是否需要更多信息。

当我突然遇到这个消息时,我正在修改我写的一个大代码: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

4

4 回答 4

19

看起来您正试图直接调用另一个构造函数。你不能在 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,我在我的系统上测试了这两个版本。

于 2012-07-09T08:04:18.650 回答
4

不允许调用其他class类似的构造函数(C++11 中有委托构造函数)。您需要初始化类的成员(正如您可能在另一个构造函数中所做的那样)。

编辑:

根据GCC 中的C++0x/C++11 Support ,委托构造函数在 GCC v4.7 中实现

于 2012-07-09T08:03:33.377 回答
3

您不能在不同构造函数的初始化列表中调用同一类的构造函数(在 C++03 中)。但是您可以相应地初始化成员:

integer(const std::string & val, uint16_t base): _start(val.begin())
                                                 _end(val.end())
                                                 _base(base)
{}
于 2012-07-09T08:03:04.063 回答
1

It's not supported in g++-4.6 ("Delegating constructors | N1986 | No"), but is supported in 4.7.

于 2012-07-09T08:12:09.223 回答