• 締切済み

typedef部分でのコンパイルエラー

本に付属のプログラムを動かそうとしているのですが、コンパイルエラーが出て困っています。 言語はC++、コンパイル環境はCygwinでg++です。 typedef CellUtil<ExpressionCell> CellType; extern CellType *uCell; 上記の部分で 106: error: expected init-declarator before '<' token 106: error: expected `,' or `;' before '<' token 107: error: expected init-declarator before '*' token 107: error: expected `,' or `;' before '*' token とエラーが出ます。 CellType *uCell は別のcppファイルで宣言してあります。 typedefでは<>記号は使えたと思うので、何が原因か知っている方教えてください。 本自体も10年前に発行されたものなのでいろいろ困惑しています。 お願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

#2 の通りだな. この場合, typedef の前に最低限 ・テンプレートクラス CellUtil の宣言 ・クラス ExpressionCell の宣言 は必要 (宣言ではダメで, 定義が必要かもしれんが). そもそも typedef CellUtil<ExpressionCell> CellType; の時点で ExpressionCell が何物か, コンパイラにはわからないっしょ?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

使うより前に宣言(または定義)がC/C++の基本です。 > 後その前にも下記のような警告が出ていましたが、友人にそれは無視してもいい部分だといわれていたので、書いていませんでした。 なぜ無視してよいかは聞きましたか? 直せるなら、直した方がよいでしょう。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

CellUtil と ExpressionCell はきちんと定義されていますか? そしてどのように定義されていますか? あと念のためですが, その前にエラーや警告は出てませんよね?

daus1mu
質問者

補足

同じファイルの下のほうに class ExpressionCell { /関数内は省略させていただきます/ }; template<class TC> class CellUtil { /関数内は省略させていただきます/ }; と二つとも定義していますが、typedefの前にプロトタイプ宣言しておかないといけないんでしょうか? 後その前にも下記のような警告が出ていましたが、友人にそれは無視してもいい部分だといわれていたので、書いていませんでした。 In file included from /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/backwardstrstream:51, from Frame/GpAppTpl.h:79, from Creator.h:7, from CGpFrame.cpp:7: /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. In file included from Creator.h:7, from CGpFrame.cpp:7:

関連するQ&A