Code:
class Editor
{
// c'tors etc
Gtk::EventBox canvas_event_box;
void functionA();
void functionB() const;
}
// This is fine
void functionA()
{
const Glib::RefPtr<Gdk::Window> p = canvas_event_box.get_window();
}
// But this won't compile
void functionB() const
{
const Glib::RefPtr<Gdk::Window> p = canvas_event_box.get_window();
}
When I try to compile functionB in Visual C++ it gives me this error:-
glibmm/refptr.h(199) : error C2440: 'initializing' : cannot convert from 'const Gdk::Window *' to 'Gdk::Window *'
Conversion loses qualifiers
and this is the code from glibmm/refptr.h
Code:
// The templated ctor allows copy construction from any object that's
// castable. Thus, it does downcasts:
// base_ref = derived_ref
template <class T_CppObject>
template <class T_CastFrom>
inline
RefPtr<T_CppObject>::RefPtr(const RefPtr<T_CastFrom>& src)
:
// A different RefPtr<> will not allow us access to pCppObject_. We need
// to add a get_underlying() for this, but that would encourage incorrect
// use, so we use the less well-known operator->() accessor:
pCppObject_ (src.operator->())
{
if(pCppObject_)
pCppObject_->reference();
}
I don't actually want to change anything in the member variable canvas_event_box. I just want to be able to call one of its functions from my 'const' member function. Is there any syntax I can use to tell VC++ that I'm not actually changing the variable - just using it