使用Qt 5.4并在Qt Creator中编译。
在小部件1中,有一个文件范围的QList:
static QList< Tag * > g_Tags;
请注意,Tag继承自BaseDataObject。 Tag和BaseDataObject都有私有的,未定义的拷贝构造函数和operator =()函数。
同样在小部件1中,有以下构造函数调用:
MoverDialog dlg( g_Tags, this );
以简化形式,MoverDialog.h看起来像:
class MoverDialog : public QDialog
{
Q_OBJECT
public:
///////////////////////////////////////////////////////////////////////////////////////////
// Constructors/Destructor
explicit MoverDialog( QList< BaseDataObject * > & availableList,
QWidget * parent = 0 );
virtual ~MoverDialog();
etc. etc.
编译此代码时,出现以下错误:
D:\MyDocs\Projects\dsb\Src\Apps\RecipeMgr_Qt\Source\Ui\RecipeGeneralWidget.cpp:166: error: C2664:
'MoverDialog::MoverDialog(QList<T> &,QList<T> &,QWidget *)' : cannot convert parameter 1
from 'QList<T>' to 'QList<T> &'
with
[
T=recipemgr::BaseDataObject *
]
and
[
T=recipemgr::Tag *
]
and
[
T=recipemgr::BaseDataObject *
]]
如果我将文件范围列表的声明更改为:
,编译成功static QList< BaseDataObject * > g_Tags;
为什么编译失败,文件范围列表使用&#34;标记*&#34;如此帖子顶部所示?