我有一个类似的课程
class HtmlRover
{
public:
HtmlRover(const std::string::const_iterator &, const std::string::const_iterator &);
~HtmlRover();
// ...
private:
/...
std::string::const_iterator _curIter;
const std::string::const_iterator _offend;
/...
};
Run Code Online (Sandbox Code Playgroud)
我的编译器抱怨我_offend在构造函数的实现中的实例化:
HtmlRover::HtmlRover(const std::string::const_iterator & it1, const std::string::const_iterator & it2)
{
_curIter = it1;
_offend = it2;
}
Run Code Online (Sandbox Code Playgroud)
它说
No vaiable overload "="
Run Code Online (Sandbox Code Playgroud)
现在我明白这可能与const设置为变量引用的变量有关,但是引用也是const如此,那么问题是什么呢?我知道const变量不能在没有被初始化的情况下存在,但这也不应该是一个问题,因为_offend在初始化HtmlRover对象时正确初始化.
由于_offend是const你需要使用一个基地成员初始化器将其值设置:
HtmlRover::HtmlRover(const std::string::const_iterator & it1, const std::string::const_iterator & it2) :
_offend(it2)
{
_curIter = it1;
}
Run Code Online (Sandbox Code Playgroud)
_curIter虽然语言不会坚持这样做,但是对待他们是一个好主意.
您必须在初始化列表中初始化const成员:
HtmlRover::HtmlRover(const std::string::const_iterator & it1,
const std::string::const_iterator & it2)
: _curIter(it1) // can be here
, _offend(it2) // must be here
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |