Добавьте три объекта в список STL - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть шаблонный класс, который имеет три члена данных: «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 голосов
/ 05 ноября 2018

Неясно, чего вы пытаетесь достичь. Возможно, вы неправильно поняли назначение шаблонов.

Может быть, вы хотите что-то вроде этого:

#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;
};

Если вы хотите использовать другой конструктор и методы setVal и show, вам также необходимо реализовать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...