将带有模板类参数的构造函数传递给另一个函数

passing a constructor with template class arguments to a another function

本文关键字:构造函数 函数 另一个 参数      更新时间:2023-10-16

我有一个类,它的构造函数必须用模板类参数初始化。现在,我需要将这个类的构造函数传递给main()中的另一个方法。但是我正在尝试这样做,它抛出一个错误,我无法得到它的解决方案。

template<class K>
Class Student
{
    friend void printFunction();
    public:
    Student(K val)
    {std::cout<<val;}
};
void printFunction(Student object)
{
    ......
}
int main()
{
    Student <int> object(10);
    printFunction(object); //This line throws an error 
}

错误信息如下:

error: use of class template 'Student' requires template arguments

您的代码有几个问题。第一个简单的方法是将类名Student传递给printFunction的调用。你应该调用printFunction(object)

其次,要使printFunction接受模板类Student的实例,您还需要使其成为模板。

#include <iostream>
template<class K>
class Student;
template<class K>
void printFunction(Student<K> object)
{
    std::cout << object.val;
}

template<class K>
class Student
{
    friend void printFunction<>(Student<K>);
public:
    Student(K val) : val(val) {}
private:
    K val;
};

int main()
{
    Student<int> object(10);
    printFunction(object); 
}