下面的代码有什么问题?它正在一些编译器中进行编译。但在某些编译器中,它抛出错误,说:

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);

09-10 00:07