无法在类中使用带有数组的函数模板作为参数

时间:2015-05-12 10:36:13

标签: c++ arrays templates

我创建了一个功能模板。 如果我在函数中使用它,它工作正常。 现在,我想在课堂上使用它但不能编译代码:

#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驱动程序的接口。

1 个答案:

答案 0 :(得分:2)

Array2QList<>(frame, buffer, numBytes);

此处numBytesconst int,但Array2QListint&。您无法将非const引用绑定到const的内容。目前还不清楚你为什么要通过引用来获取该参数,所以如果你只是通过值传递它,它就会起作用。

template <typename T>
void Array2QList(QList<T> &outList, const T in[], int insize){
//                                     get rid of &  ^