有以下 B 类派生自 std::vector
class B: public std::vector <unsigned int>
{
public:
B() : std::vector <unsigned int> ( 0 ) {}
};
和一个 A 类 witten 如下:
class A
{
private:
B b;
double x;
public:
B & getB () {return b;}
B const & getB() const {return b;}
bool operator() ( const A & a ) const
{
return a < a.x;
}
};
为什么不可能从其迭代器返回对存储在 std::list 中的某个对象 A 的变量 b 的引用(以及如何做到这一点)?
int main ()
{
std::set <A > alist;
std::set <A> ::iterator i_alist = alist.begin();
for (; i_alist != alist.end(); i_list++)
{
B &il = (*i_alist).getB(); //Compiler error
B &il2 = i_alist->getB(); //Compiler error
il.push_back(10); //Modify il and concurrently B
}
}
编译器错误:
Error 1 error C2440: 'initializing' : cannot convert from 'const B' to 'B &' d:\test.cpp
谢谢你的帮助...
编辑问题:
使用 const_cast 的可能解决方案:
B &il2 = const_cast <B&> ( i_alist->getB() );