2016-10-29 14 views
-1

これは、私がこの課題に対して取り組んでいる問題のより具体的な質問です。基本的には、(リンクされたリストの代わりに)STLを使用してリストを作成することです。私は私の割り当てのMAIN.CPPファイルに実行しようとしながらC++のリストがコンテナとして認識されませんか?

#include <vector> 
#include <iterator> 

vector<char> container = { 'A','B','C','D','E' }; 

    cout << "Print vector using an iterator: "; 
    vector<char>::iterator iter = container.begin();  
    while (iter != container.end()) 
    { 
     cout << *iter << " "; 
     ++iter; 
    } 
    cout << endl;     // OUTPUT: A B C D E   

:例では私のようなものを見

#include "AnyList.h" 

#include <iostream> 
#include <vector> 
#include <iterator> 

using namespace std; 

int main() 
{ 
    AnyList list1, list2; 

    list1.insertFront(10); 
    list1.insertFront(11); 
    list1.insertFront(12); 
    list1.insertFront(13); 
    list1.insertFront(14); 

    list<int>::const_iterator iter = list1.begin(); 

AnyList.h

#ifndef ANYLIST_H 
#define ANYLIST_H 

#include<iostream> 
#include <string> 
#include <list> 

#include <vector> 
#include <iterator> 

class AnyList 
{ 
public: 

    AnyList(); 

    int getNumOfElem() const; 

    void insertFront(int data); 
    void forwardPrint(); 

private: 
    list<int> *ptr; 
}; 

#endif 

AnyList.cpp

#include "AnyList.h" 
#include <vector> 
#include <iterator> 

AnyList::AnyList() 
{ 

} 

int AnyList::getNumOfElem() const 
{ 
    return static_cast<int>(ptr->size()); 
} 

void AnyList::insertFront(int data) 
{ 
    ptr->push_front(data); 
} 

void AnyList::forwardPrint() 
{ 
    list<int>::const_iterator i; 
    for (i = ptr->begin(); i != ptr->end(); ++i) 
    { 
     cout << *i << " "; 
     cout << endl; 
    } 
} 

メインファイルの行番号

list :: const_iterator iter = list1.begin();

"begin"はAnyListのメンバーではないというエラーが表示されます。私は問題が何であるかを調べました。実際のコンテナではないlist1によって引き起こされたようです。それはinsertFrontによって作成されたリストのコンテナでなければなりませんが、それを認識していません。

リストの実装方法に間違いがありますか?または、insertFrontが正しく行われていませんか?実際にその行でプログラムを実行しようとした理由は、insertFrontが正常に動作しているかどうかを確認することですが、今は間違いがどこにあるのかわかりません。私が見た例のほとんどは、クラス内で実装することなく1つのファイルで宣言されているため、この割り当てはこの時点で非常に混乱しています。

- AnyListクラス、privateメンバー変数、およびgetNumOfElem関数はすでにファイルに含まれており、getNumOfElemは実際の実装例として提供されています。

編集:また、変数「ptr」をここで正しく初期化する方法についての助けが必要です。なぜなら、これが多くのことを妨げている問題かもしれないからです。

+0

問題は 'AnyList'は文字通り' begin'メソッドを提供しないということです。つまり、getNumOfElem'、 'insertFront'、' forwardPrint'をサポートしています。それでおしまい。 – melpomene

+0

この課題を自分で解決しようとしているかもしれませんか?あなたはそれをあなたのために書いてみようとしているようです、一度に一つの愚かな間違い。 – juanchopanza

+0

私はそれをやろうとしており、これがその始まりです。私は、これらの質問が出てくる問題を解決する方法を知っていれば、必要ではないと思います。 – BaloneyOs

答えて

0
AnyList list1, list2; 

list<int>::const_iterator iter = list1.begin(); 

このコードはlist1オブジェクトのbegin()メソッドを呼び出します。 list1AnyListクラスのインスタンスです。

AnyListクラスを使用するには、begin()というクラスメソッドを実装し、list<int>::const_iteratorを返す必要があります。

質問に表示されるAnyListクラスの宣言は、このクラスがbegin()というメソッドを実装していないことを示しています。 AnyListクラスは、getNumOfElem(),insertFront()、およびforwardPrint()という3つのクラスメソッドしか実装していません。

コンテナは、C++の自動魔法の概念ではなく、どのクラスでも自動的に動作します。コンテナはそれ自体の通常のクラス(テンプレートクラスですが、ここでは関係ありません)です。通常のメソッドです。定義が含ま

AnyListクラスは、AnyListクラスはCのためのすべての要件を満たす必要があり、コンテナのように振る舞い、およびコンテナで使用できるC++ライブラリのアルゴリズムとテンプレートの残りの部分で作業する必要がある場合

++コンテナ、独自の begin()end()の方法、および他の方法、ならびにいくつかの内部型の定義が含まれる。

+0

私は入力をありがとう、参照してください!そのクラスで定義する必要があるのはなぜですか(この例のように)。 – BaloneyOs

+0

どのような例ですか? 'begin()'/'end()'などを定義する例はありません。 "クラス外"。 –

+0

私のポストのコードの最初のブロックに(ベクトルで)。私が見ているサンプルファイル(またはオンラインの例)のどれもbegin()で定義されていません。 – BaloneyOs

関連する問題