上記の例をコンパイルしようとしていますが、コンパイルされません (Windows、Mingw 4.8)。エラーは次のとおりです。
In file included from ..\abstractitemmodel\main.cpp:40:0: ..\abstractitemmodel\model.h:77:27: error: conflicting return type specified for 'virtual QHash<int, QByteArray> AnimalModel::roleNames() const'
QHash<int,QByteArray> roleNames() const;
^
In file included from ..\..\..\..\include\QtCore/QAbstractListModel:1:0,
from ..\abstractitemmodel\model.h:40,
from ..\abstractitemmodel\main.cpp:40:
..\..\..\..\include\QtCore/qabstractitemmodel.h:234:43: error: overriding 'virtual const QHash<int, QByteArray>& QAbstractItemModel::roleNames() const'
virtual const QHash<int,QByteArray> & roleNames() const;
明らかに QAbstractListModel のプロトタイプは、オブジェクトではなく参照を期待しています。コードを変更する方法がわからないので、実際には機能します。
QHash メンバーを AnimalModel に追加し、コンストラクターで初期化してから参照を返すと、プログラムがクラッシュします。