2012-02-01 16 views
0

私はインストラクターから提供されたコードを使用してDLLを作成しています。しかし、私は自宅でそれをコンパイルしようとしており、動作していないようです。どんな助けもありがとう。私はC++でDLLを作成していますが、永続的なエラーが発生しています

template<class T> 
class mySTLlist : public list<T> { 
public: 
    void addInMiddle(T t){} 

    friend ostream& operator<<(ostream& out, mySTLlist<T>& lst) { 
     for(mySTLlist<T>::iterator i = lst.begin(); i != lst.end(); i++) 
      out << *i << ' '; 
     out << '\n'; 
     return out; 
}; 

それはで私にエラーを与える:それは私がそれの前に;を必要とし、それが宣言されていないことを言う

mySTLlist<T>::iterator i = lst.begin(); 

。 私はあなたがのtypedefイテレータを追加する必要がC++

+1

最低でもコードの塊を見逃していない限り、閉じた中括弧が欠けているようです。 – Rig

答えて

2

これはそれを含めることが重要である理由の良い例です完了の例、およびすべてのエラーメッセージを読むこともできます。あなたのコードにはいくつかのインクルードヘッダーがありません。最低でも、それがトップで次が必要です。

#include<list> 
#include<iostream> 
using namespace std; 

私はそれらを修正し、最後に行方不明}を追加し、それをコンパイルすると、私は3つのエラーを取得:最初の1

foo.cpp:14:9: error: need 'typename' before 'mySTLlist<T>::iterator' because 
'mySTLlist<T>' is a dependent scope 
foo.cpp:14:32: error: expected ';' before 'i' 
foo.cpp:14:49: error: 'i' was not declared in this scope 

を"typename"を追加する必要があると言います(これは引用符で囲まれています。タイプ名ではなく、文字型のキーワードtypenameを意味する)ので、必要なことを正確に追加してその行を次のように変更します:

for(typename mySTLlist<T>::iterator i = lst.begin(); i != lst.end(); i++) 

これで問題は解決しました。 iの宣言がバグだったので、表示されているエラーは後続のエラーです。ファイルの残りの部分で何ができるかを確認するために、スキップしました。次にiを使用すると、宣言されていない(つまり、宣言をスキップしたため)というエラーが表示されます。また、同じく最初のエラーをスキップしているために、;エラーが発生します。したがって、最初にの問題を修正してください。残りの問題は修正されています。

+0

私はgccを使用していると仮定していますが、これは良いエラーメッセージを表示しますが、コンパイラによっては有益なエラーメッセージが表示されない可能性があります。 –

+0

こんにちは、ありがとう、問題を解決したが、私は未確認の参照エラーを取得しますが、コンパイルします。助けてくれてありがとう – Bill

+0

@Jesseそうです、MSVCはこの場合文句を言っていません... – vitakot

1

に比較的新しいです:

typedef typename mySTLlist<T>::iterator myListIter; 

、その後、書き込み:

friend ostream& operator<<(ostream& out, mySTLlist<T>& lst) { 
    for(myListIter i = lst.begin(); i != lst.end(); i++) 
     out << *i << ' '; 
    out << '\n'; 
    return out; 
+0

なぜ 'typedef'が必要ですか?' typename mySTLlist :: iterator'を 'i'の宣言に直接書くのではなく、なぜですか? –

+0

私は 'typedef'を必要としません、それは私の頭に来た最初のものでした:...私はネイティブの英語のスピーカーではないので、数分で私はあなたの答えに非常に似たものを書くでしょう。 C++の質問からいくつかのカルマを得るためには速くなければならない。あまりにも多くのC + +の達人が、私はいつも私の答えで遅れている - この場合のように:) – vitakot

+0

十分に公正。私は何かが役に立ったと思っていた。 :) –

関連する問題