C++ 警告:派生类';s成员变量在基类之后初始化
问题的题目简单明了。代码如下:C++ 警告:派生类';s成员变量在基类之后初始化,c++,boost-function,C++,Boost Function,问题的题目简单明了。代码如下: class xxx : public Scheduled { long int _wait_time; boost::function< void() > _cb; mutable boost::mutex _mutex; public: xxx(boost::function< void() > callback, unsigned int wait_time = 10000000) :_wait
class xxx : public Scheduled
{
long int _wait_time;
boost::function< void() > _cb;
mutable boost::mutex _mutex;
public:
xxx(boost::function< void() > callback, unsigned int wait_time = 10000000)
:_wait_time(wait_time),_cb(callback)
,Scheduled(Timer(_wait_time, 0))
{
this->stop();
}
};
xxx类:公共计划
{
长时间等待;
boost::函数\u cb;
可变增强::互斥体_互斥体;
公众:
xxx(boost::function回调,unsigned int wait_time=10000000)
:_wait_time(等待时间),_cb(回调)
,已计划(计时器(_wait_time,0))
{
此->停止();
}
};
尽管我尊重初始化的顺序,但我得到的警告如下:
---: In constructor ‘xxx::xxx(boost::function<void ()()>, unsigned int)’:
---: warning: ‘xxx::_cb’ will be initialized after
---: warning: base ‘Scheduled’
---: warning: when initialized here
--:在构造函数“xxx::xxx(boost::function,unsigned int)”中:
---:警告:“xxx::\u cb”将在
---:警告:基本“已计划”
---:警告:在此处初始化时
有什么想法吗?谢谢基类构造函数必须是初始化列表中的第一个构造函数:
xxx(boost::function< void() > callback, unsigned int wait_time = 10000000)
:Scheduled(Timer(_wait_time, 0))
,_wait_time(wait_time),
,_cb(callback)
{
this->stop();
}
xxx(boost::function回调,unsigned int wait_time=10000000)
:已计划(计时器(_wait_time,0))
,_wait_time(等待时间),
,_cb(回调)
{
此->停止();
}
基类构造函数必须是初始化列表中的第一个构造函数:
xxx(boost::function< void() > callback, unsigned int wait_time = 10000000)
:Scheduled(Timer(_wait_time, 0))
,_wait_time(wait_time),
,_cb(callback)
{
this->stop();
}
xxx(boost::function回调,unsigned int wait_time=10000000)
:已计划(计时器(_wait_time,0))
,_wait_time(等待时间),
,_cb(回调)
{
此->停止();
}
基类构造函数必须是初始化列表中的第一个构造函数:
xxx(boost::function< void() > callback, unsigned int wait_time = 10000000)
:Scheduled(Timer(_wait_time, 0))
,_wait_time(wait_time),
,_cb(callback)
{
this->stop();
}
xxx(boost::function回调,unsigned int wait_time=10000000)
:已计划(计时器(_wait_time,0))
,_wait_time(等待时间),
,_cb(回调)
{
此->停止();
}
基类构造函数必须是初始化列表中的第一个构造函数:
xxx(boost::function< void() > callback, unsigned int wait_time = 10000000)
:Scheduled(Timer(_wait_time, 0))
,_wait_time(wait_time),
,_cb(callback)
{
this->stop();
}
xxx(boost::function回调,unsigned int wait_time=10000000)
:已计划(计时器(_wait_time,0))
,_wait_time(等待时间),
,_cb(回调)
{
此->停止();
}
在构造基类之前,您正在初始化派生类成员
xxx(boost::function< void() > callback, unsigned int wait_time = 10000000)
:_wait_time(wait_time),_cb(callback) <- derived class memebers
,Scheduled(Timer(_wait_time, 0)) <- Base class
{
this->stop();
}
xxx(boost::function回调,unsigned int wait_time=10000000)
:_wait_time(wait_time),_cb(回调)回调,unsigned int wait_time=10000000)
:已计划(计时器(等待时间,0))
^使用等待时间而不是等待时间
,_wait_time(等待时间),
,_cb(回调)
{
此->停止();
}
您不应再收到警告。在构造基类之前,您正在初始化派生类成员
xxx(boost::function< void() > callback, unsigned int wait_time = 10000000)
:_wait_time(wait_time),_cb(callback) <- derived class memebers
,Scheduled(Timer(_wait_time, 0)) <- Base class
{
this->stop();
}
xxx(boost::function回调,unsigned int wait_time=10000000)
:_wait_time(wait_time),_cb(回调)回调,unsigned int wait_time=10000000)
:已计划(计时器(等待时间,0))
^使用等待时间而不是等待时间
,_wait_time(等待时间),
,_cb(回调)
{
此->停止();
}
您不应再收到警告。在构造基类之前,您正在初始化派生类成员
xxx(boost::function< void() > callback, unsigned int wait_time = 10000000)
:_wait_time(wait_time),_cb(callback) <- derived class memebers
,Scheduled(Timer(_wait_time, 0)) <- Base class
{
this->stop();
}
xxx(boost::function回调,unsigned int wait_time=10000000)
:_wait_time(wait_time),_cb(回调)回调,unsigned int wait_time=10000000)
:已计划(计时器(等待时间,0))
^使用等待时间而不是等待时间
,_wait_time(等待时间),
,_cb(回调)
{
此->停止();
}
您不应再收到警告。在构造基类之前,您正在初始化派生类成员
xxx(boost::function< void() > callback, unsigned int wait_time = 10000000)
:_wait_time(wait_time),_cb(callback) <- derived class memebers
,Scheduled(Timer(_wait_time, 0)) <- Base class
{
this->stop();
}
xxx(boost::function回调,unsigned int wait_time=10000000)
:_wait_time(wait_time),_cb(回调)回调,unsigned int wait_time=10000000)
:已计划(计时器(等待时间,0))
^使用等待时间而不是等待时间
,_wait_time(等待时间),
,_cb(回调)
{
此->停止();
}
您不应该再收到警告。添加到其他答案中:
如果初始值设定项的顺序与它们在类中出现的顺序不同,则会出现此警告的另一个原因 例如:
struct A { .. };
struct B { .. };
struct C
{
A a;
B b;
C(..) : a(..), b(..) {} // OK
C(..) : b(..), a(..) {} // Wreorder-warning
};
添加到其他答案:
如果初始值设定项的顺序与它们在类中出现的顺序不同,则会出现此警告的另一个原因 例如:
struct A { .. };
struct B { .. };
struct C
{
A a;
B b;
C(..) : a(..), b(..) {} // OK
C(..) : b(..), a(..) {} // Wreorder-warning
};
添加到其他答案:
如果初始值设定项的顺序与它们在类中出现的顺序不同,则会出现此警告的另一个原因 例如:
struct A { .. };
struct B { .. };
struct C
{
A a;
B b;
C(..) : a(..), b(..) {} // OK
C(..) : b(..), a(..) {} // Wreorder-warning
};
添加到其他答案:
如果初始值设定项的顺序与它们在类中出现的顺序不同,则会出现此警告的另一个原因 例如:
struct A { .. };
struct B { .. };
struct C
{
A a;
B b;
C(..) : a(..), b(..) {} // OK
C(..) : b(..), a(..) {} // Wreorder-warning
};
谢谢,但是如果基类初始化依赖于派生成员呢?例如,您更正了我的等待时间。如果
\u wait\u time
是一个在提供给base之前必须初始化的类,该怎么办?@rahman,那么您的设计就被破坏了。基类必须在类的任何非静态成员之前初始化。在初始化基类之前,没有一个派生类成员被初始化,因此您将使用垃圾值。谢谢,但是如果基类初始化依赖于派生成员呢?例如,您更正了我的等待时间。如果\u wait\u time
是一个在提供给base之前必须初始化的类,该怎么办?@rahman,那么您的设计就被破坏了。基类必须在类的任何非静态成员之前初始化。在初始化基类之前,没有一个派生类成员被初始化,因此您将使用垃圾值。谢谢,但是如果基类初始化依赖于派生成员呢?例如,您更正了我的等待时间。如果\u wait\u time
是一个在提供给base之前必须初始化的类,该怎么办?@rahman,那么您的设计就被破坏了。基类必须在类的任何非静态成员之前初始化。在初始化基类之前,没有一个派生类成员被初始化,因此您将使用垃圾值。谢谢,但是如果基类初始化依赖于派生成员呢?比如你纠正了我的错误