2017-05-31 8 views
-5

私はそれに20個の数字を持つリストを持っています(theList)。私はbackardsそれを読んで、それを行うには、この機能を持つようにしたい:C++は値のリストを返しますか?

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' 

なぜですか?私は今何が間違っているのか分からない。私は一時的なリストを作成し、その値をpush_backしてそのリストを返さなければならないと考えましたが、私は間違っていたと思います。誰か助けてくれますか?多分私はここで完全に寝ているのだろうか? :

+6

戻り値の型は 'T'、 'ないリスト'です。 – LogicStuff

+0

さて、ありがとう!私はまだ何をすべきか分かっていませんが、私は私の質問が多くの否定的な反応を得ているのを見ることができるので、私はそれを理解しなければならないと思います。 :( – StudentLerning

+1

Tのリストを返す場合は、Tを返すのではなく*を*する。intはdouble型ではない。 –

答えて

0

コードでは、返される変数はlist<T>です。返される変数はTです。具体的な型(およびテンプレートなし)でコードを開発することをお勧めします。後でプレースホルダと具体的な型を交換することができますが、具体的な型は実際に何が起こるかをよりよく理解することができます。 次のコードを試してみて、テンプレートにそれを翻訳:

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 << " "; 
    } 
} 
関連する問題