我创建了一个功能模板。 如果我在函数中使用它,它工作正常。 现在,我想在课堂上使用它但不能编译代码:
#include <QList>
// Function template
template <typename T>
void Array2QList(QList<T> &outList, const T in[], int &insize)
{
for (int i = 0; i < insize; ++i)
outList.append(in[i]);
}
// Class using the template
class Parser
{
public:
Parser(const unsigned char buffer[], const int numBytes){
Array2QList<>(frame, buffer, numBytes); // This one fails
}
~Parser(){}
QList<unsigned char> frame;
};
// Main
int main(int argc, char *argv[])
{
int size = 50;
unsigned char buffer[size];
QList<unsigned char> frame;
Array2QList<unsigned char>(frame, buffer, size); // This one works
Parser parser = Parser(buffer, size);
return 0;
}
我得到的错误是:
.. \ SandBox \ main.cpp:在构造函数&#39; Parser :: Parser中(const unsigned char *,int)&#39;:
.. \ SandBox \ main.cpp:20:错误:没有匹配功能 调用&#39; Array2QList(QList&amp;,const unsigned char *&amp;,const int&amp;)&#39;
注意:我必须是数组,因为它是USB驱动程序的接口。
答案 0 :(得分:2)
Array2QList<>(frame, buffer, numBytes);
此处numBytes
为const int
,但Array2QList
为int&
。您无法将非const
引用绑定到const
的内容。目前还不清楚你为什么要通过引用来获取该参数,所以如果你只是通过值传递它,它就会起作用。
template <typename T>
void Array2QList(QList<T> &outList, const T in[], int insize){
// get rid of & ^