【问题标题】:C++ return a list of values? [closed]C ++返回值列表? [关闭]
【发布时间】:2017-11-01 20:25:29
【问题描述】:

我有一个包含 20 个数字的列表(theList)。我想背诵它并有这个功能来做到这一点:

template<typename T>
T funktioner<T>::swap(list<T> &theList)
{
list<T> li;
auto start = theList.rbegin(), stop = theList.rend();
for (auto it = start; it != stop; ++it)
{
    li.push_back(*it);
}

return li;
}

我在这个函数中从我的 UserInterface 调用函数:

template<typename T>
void UserInterface<T>::swap()
{
cout << func.swap(List) << endl;

}

但这不能正常工作,我收到以下错误消息:

error C2440: 'return': cannot convert from 'std::list<T,std::allocator<_Ty>>'to 'int'
error C2440: 'return': cannot convert from 'std::list<T,std::allocator<_Ty>>'to 'double'

为什么?我不知道这次我做错了什么。我认为我必须创建一个临时列表并将值推送到该列表并返回该列表,但我想我错了,我真的不擅长这个。有人能帮我吗?也许我在这里完全起床了? :O

【问题讨论】:

  • 返回类型是T,而不是list&lt;T&gt;
  • 好的,谢谢!我仍然不知道该怎么做,但我想我必须自己弄清楚,因为我可以看到我的问题得到了很多负面回应,所以我想我只是愚蠢。 :(
  • 如果你想返回一个 T 的列表,那么 that 而不是返回一个 T。另外,整数不是双精度数。
  • @StudentLerning 错误信息有什么难以理解的地方吗?你的意图是好的,但这并不意味着你不能打错字而不去尝试阅读它们。
  • 与您的问题完全无关,但仍然;为什么list?在几乎任何情况下,vector 将是优先的(在实践中表现更好)..

标签: c++ list templates


【解决方案1】:

在您的代码中,您声明返回类型T,但您返回的变量类型为list&lt;T&gt;。我建议首先使用具体类型(并且没有模板)开发您的代码;您可以在之后将具体类型与占位符交换,但具体类型可以更好地了解实际发生的情况。 尝试以下代码并将其转换为模板:

list<int> swapList(list<int> &theList)
{
    list<int> li;
    auto start = theList.rbegin(), stop = theList.rend();
    for (auto it = start; it != stop; ++it)
    {
        li.push_back(*it);
    }

    return li;
}

int main()
{
    list<int> source { 1,2,3,4 };
    list<int> swapped = swapList(source);
    for (auto i : swapped) {
        cout << i << " ";
    }
}

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2016-12-22
    • 2020-09-12
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多