将三个对象添加到STL列表

时间:2018-11-05 15:27:42

标签: c++ list class stl

我有一个包含三个数据成员的模板类:“ val1”,“ val2”和“ val3”。我想在主函数中定义模板类的STL列表结构。我正在尝试(未成功)将三个对象添加到列表中,然后在检索列表时将它们打印出来。

此行会产生错误:singleTemplate t(8,5,6);

错误C2664

  

没有可用的用户定义的转换运算符可以执行此转换,否则无法调用该运算符

实施:

#pragma once

template < class T1, class T2, class T3 >

class singleTemplate
{
public:
    singleTemplate();
    singleTemplate(T1 v1, T2 v2, T3 v3);
    void setVal(T1 v1, T2 v2, T3 v3);
    void show();
private:
    T1 val1;
    T2 val2;
    T3 val3;
};

#include <iostream>
using namespace std;
#include "singleTemplate.h"
#include <forward_list>
#include <algorithm>


int main()
{

    forward_list<double> mylist;

    singleTemplate t(8, 5, 6);

    mylist.push_front(t);
}

1 个答案:

答案 0 :(得分:2)

目前尚不清楚您要达到的目标。也许您误解了模板的用途。

也许您想要这样的东西:

#include <forward_list>
#include <algorithm>

int main()
{
  forward_list<singleTemplate<int, int, double>> mylist;
  singleTemplate<int, int, double> t;
  mylist.push_front(t);
}

但是要进行编译,您至少需要实现这样的默认构造函数:

template < class T1, class T2, class T3 >    
class singleTemplate
{
public:
  singleTemplate() {};                  // <<< modify here
  singleTemplate(T1 v1, T2 v2, T3 v3);
  void setVal(T1 v1, T2 v2, T3 v3);
  void show();
private:
  T1 val1;
  T2 val2;
  T3 val3;
};

如果要使用其他构造函数以及setValshow方法,则还需要实现它们。