C++ 无法推断';的模板参数;类型';

C++ 无法推断';的模板参数;类型';,c++,templates,C++,Templates,我有以下工作正常的代码: list <Politician> MakeList ( int num, ... ){ va_list arguments; va_start ( arguments, num ); list <Politician> PoliticianList; for ( int x = 0; x < num; x++ ) { PoliticianList.push_back(

我有以下工作正常的代码:

list <Politician> MakeList ( int num, ... ){
  va_list arguments;                     
  va_start ( arguments, num ); 
  list <Politician> PoliticianList;
  for ( int x = 0; x < num; x++ ) {
      PoliticianList.push_back(va_arg (arguments, Politician));
  }
  va_end ( arguments );                 

  return PoliticianList;       
}
列表生成列表(int num,…){
va_列表参数;
va_开始(参数,num);
政治主义者名单;
对于(int x=0;x
但是,在尝试使其通用时:

template<class TYPE>
list <TYPE> MakeList ( int num, ... ){
  va_list arguments;                     
  va_start ( arguments, num ); 
  list <TYPE> PoliticianList;
  for ( int x = 0; x < num; x++ ) {
      PoliticianList.push_back(va_arg (arguments, TYPE));
  }
  va_end ( arguments );                 

  return PoliticianList;       
}
模板
列表生成列表(int num,…){
va_列表参数;
va_开始(参数,num);
政治主义者名单;
对于(int x=0;x
我在编译时遇到以下错误:

error C2783: 'std::list<TYPE> MakeList(int,...)' : could not deduce template argument for 'TYPE'
错误C2783:'std::list MakeList(int,…):无法推断'TYPE'的模板参数

如何使其成为泛型,这样就不必为不同的类对象重新实现?

在调用
MakeList
的模板版本时,您需要显式地为
TYPE
提供模板参数,因为编译器仅根据您提供的参数不知道,应该是什么类型的
。例如,给定以下调用:

MakeList<Politician>(3, politician1, politician2, politician3)
然后您可以这样使用它:

int main()
{
    Politician p1{"John", "Smith"};
    Politician p2{"Mike", "Black"};
    Politician p3{"George", "White"};

    std::list<Politician> myList = MakeList(p1, p2, p3);

    for (auto const& p : myList)
    {
        std::cout << p.name << " " << p.surname << std::endl;
    }
}
intmain()
{
政治家p1{“约翰”、“史密斯”};
政客p2{“迈克”,“黑人”};
政治家p3{“乔治”,“怀特”};
std::list myList=MakeList(p1、p2、p3);
用于(自动常量和p:myList)
{

std::cout您如何调用该函数?如果您有C++11,可变模板将是更好的选择。您必须说
MakeList(3,foo1,foo2,foo3)
。我无法重现您的问题:。您如何使用
MakeList
?MakeList(3,foo1,foo2,foo3)
int main()
{
    Politician p1{"John", "Smith"};
    Politician p2{"Mike", "Black"};
    Politician p3{"George", "White"};

    std::list<Politician> myList = MakeList(p1, p2, p3);

    for (auto const& p : myList)
    {
        std::cout << p.name << " " << p.surname << std::endl;
    }
}