下面的代码有什么问题?它正在一些编译器中进行编译。但在某些编译器中,它抛出错误,说:
conversion from scalar to non scalar
谁能帮忙解决这个问题?
#include <iostream>
#include <set>
using namespace std;
class base
{
typedef std::set<int> Sectors;
class subclass
{
public:
class subclass2
{
private :
Sectors::const_iterator it;
public :
subclass2(Sectors::const_iterator& it);
};
subclass2 begin();
private:
Sectors _sectors;
};
};
base::subclass::subclass2 base::subclass::begin()
{
return this->_sectors.begin();
}
int main()
{
return 0;
}
最佳答案
问题是转换构造函数:
subclass2(Sectors::const_iterator& it);
通过使用可变的左值引用,不能使用临时引用来调用它。它们只能绑定到
const
或右值引用。这行代码就是这样做的:return this->_sectors.begin();
解决方法是通过
const
引用或值采用参数。通常,迭代器是轻量级的东西,适合按值传递,因此我愿意这样做:subclass2(Sectors::const_iterator it);