【问题标题】:Add three objects to STL list将三个对象添加到 STL 列表
【发布时间】:2019-04-08 23:40:01
【问题描述】:

我有一个包含三个数据成员的模板类:“val1”、“val2”和“val3”。我想在 main 函数中定义一个模板类的 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);
}

【问题讨论】:

  • "此行产生错误:" 请复制粘贴您收到的错误。我不了解你,但我不记得错误代码。
  • t 不是doublestd::list 不知道如何插入。如果您希望它扩展到推送t 的成员,那么您需要编写一个函数来为您执行此操作。
  • 您创建了 forward_listdouble,然后您尝试将 push_front single_parameter 类型变量。在list&lt;T&gt; 中,您只能使用push 类型为T 的变量。在你的情况下,double.
  • 在 Visual Studio 中,您可以轻松地从“输出”选项卡中复制错误消息的文本。请使用它而不是错误列表。和@AlgirdasPreidžius 一样,我也没有记住错误代码 C2664
  • 不清楚你想在这里实现什么。请edit您的问题并详细说明。

标签: c++ list class stl


【解决方案1】:

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

也许你想要这样的东西:

#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 方法,您还需要实现它们。

【讨论】:

    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    相关资源
    最近更新 更多