2010-12-12 7 views
0

でC++のエラー、私はC++(第2版の第1巻)で本の思考を読んでいると私は、このソースコードをコンパイルしようとすると、私は問題を抱えている中で考える:は、ソースコード

http://www.linuxtopia.org/online_books/programming_books/thinking_in_c++/Chapter16_015.html

問題が表示されますその行に含める:

Stack :: Link * p;

私はC++: error "... is not derived from type ..." で読んだので、その前に単語 "typename"(または "class")を追加する必要があります。

この例では本が間違っていますか、何か不足していますか?

答えて

3

はい、間違っています。 typenameが必要です。 typename and template FAQエントリを参照してください。

Stackは従属型であり、Stack::Listも従属型です。これは法律でC++ 0xですが、現在のC++では不正です。

+0

と、C++ 98では、本のリリース時点のバージョンはどうでしたか? –

+0

@Benそこにも必要だった。ここでリモートに関係するC++ 03に導入された唯一の変更は、*完全でない*名前の 'List'が依存型になっていることです。しかしもちろんそれは別の問題です。 –

0

この例では本が間違っていますか、何か不足していますか?

私は別のコンパイラがtypenameキーワードの異なる要件を持っていることがわかりました。 MSVCはかなり寛容ですが、gppはより厳格です。

0

これは、あまりにも古い本を使用している場合よりです。この書籍の発行日は2000年であり、C++ 98標準が完成した時点で実際の執筆の多くが行われていたことを意味しています。

現在のバージョンのC++はC++ 03で、C++ 0xは標準化に近づいています。

typenameはC++ 98では必要ないと思います。

0

これは遅すぎる一日中かもしれませんが、あなたが

スタック::リンク* pを変更した場合、コードはコンパイルする必要があります。ただ

リンク* pに