2012-07-09 41 views
7

我不完全确定需要多少信息来回答这个问题,所以告诉我是否需要更多信息。C++类不是自己的基础

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

已被定义。

我需要做些什么来解决这个问题?

编辑:IM与编译-std = C++ 0x中,其中根据答案,我应该能够编译,除非我的编译器很古老:GCC 4.6.2,我认为

+2

更新回答,可在gcc 4.7以上。 – hmjd 2012-07-09 08:11:27

回答

19

它看起来像你想直接调用另一个构造来实现。你可以这样做,在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,我在我的系统上测试了这两个版本。

+0

即时编译与-std = C++ 0x – calccrypto 2012-07-09 08:09:14

+3

@calccrypto GCC 4.6不支持这一点。我认为4.7。 – Flexo 2012-07-09 08:10:45

3

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

integer(const std::string & val, uint16_t base): _start(val.begin()) 
               _end(val.end()) 
               _base(base) 
{} 
4

不允许调用相同class像其他构造函数(也有在C++ 11委派构造函数)。你需要初始化这个类的成员(正如你在其他构造函数中完成的那样)。

编辑:

C++0x/C++11 Support in GCC ,委托构造函数是在GCC V4.7