错误编译ncurses的
问题描述:
当我试图编译的ncurses 5.9嵌入式系统(使用buildroot的),我得到这个错误信息:错误编译ncurses的
In file included from ../c++/cursesm.h:39:0,
from ../c++/cursesm.cc:35:
../c++/cursesp.h: In member function ‘T* NCursesUserPanel<T>::UserData() const’:
../c++/cursesp.h:256:43: error: no matching function for call to
‘NCursesUserPanel<T>::get_user() const’
return reinterpret_cast<T*>(get_user());
这里是有问题的代码:
/* We use templates to provide a typesafe mechanism to associate
* user data with a panel. A NCursesUserPanel<T> is a panel
* associated with some user data of type T.
*/
template<class T> class NCursesUserPanel : public NCursesPanel
{
public:
NCursesUserPanel (int nlines,
int ncols,
int begin_y = 0,
int begin_x = 0,
const T* p_UserData = STATIC_CAST(T*)(0))
: NCursesPanel (nlines, ncols, begin_y, begin_x)
{
if (p)
set_user (const_cast<void *>(p_UserData));
};
// This creates an user panel of the requested size with associated
// user data pointed to by p_UserData.
NCursesUserPanel(const T* p_UserData = STATIC_CAST(T*)(0)) : NCursesPanel()
{
if (p)
set_user(const_cast<void *>(p_UserData));
};
// This creates an user panel associated with the ::stdscr and user data
// pointed to by p_UserData.
virtual ~NCursesUserPanel() {};
T* UserData (void) const
{
return reinterpret_cast<T*>(get_user());
};
// Retrieve the user data associated with the panel.
virtual void setUserData (const T* p_UserData)
{
if (p)
set_user (const_cast<void *>(p_UserData));
}
// Associate the user panel with the user data pointed to by p_UserData.
};
256行是这一个:return reinterpret_cast<T*>(get_user());
答
这里的问题是由于编译器更新为g++ (Debian 7.2.0-5)
。新的编译器具有更好的错误处理能力,而且这个旧代码的编写没有任何好处。这里的解决方案是使用更新版本的ncurses(对于我的特定情况,不使用)或使用较旧的编译器。由于我的主机系统是Debian,因此我使用update-alternatives切换到g ++ 6.4,并且有问题的错误信息消失了。
我在这里离开这里,因为Google没有给我提供错误信息的好结果。