アプリ版:「スタンプのみでお礼する」機能のリリースについて

エラーメッセージ
too few template-parameter-lists
→私的には、templateへのパラメータが少なすぎる
と理解しているのですが。。。

コード的にには、以下の通りです。
hoge.hh
template<class T> myclass2
{
public
myclass1* piyo;
:
:
}
hoge.ccにて
myclass1* myclass2<myclass3>:piyo; →ここで上記のエラー

別のヘッダにて
class myclass3 : public myclass1<myclass3>
{
:
:
}

という感じでコーディングしてます。
gcc3.2.2でのコンパイルでは、問題なくコンパイルでき
実行もできます。

ですが、gcc3.4.2を使用するとコンパイルエラーが出てしまいます。
このエラーの回避方法をご存知の方いらっしゃいましたら
御教授願えませんでしょうか

よろしくお願い致します。

A 回答 (4件)

ご質問の内容は、「テンプレートの明示的特殊化」の


ケースに当たります。

したがって、次のようにすればコンパイルが通ります。(piyoは勝手に静的クラスメンバだと解釈しました)

class myclass1; // forward declaration
class myclass3; // same as above

template <class T>
class myclass2
{
public:
static myclass1* piyo;
};

template<>
myclass1* myclass2<myclass3>::piyo;
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。

御教授頂いたtemplateのエラー回避策は、GCC3.2.3でのGCCのupdateに
伴う回避策ですよね。。。
→GCCのメーリングリストで読みました。

私もこれを試してみたんですが、エラーとしては
変化なしです。

お礼日時:2005/11/07 16:50

gcc-3.4.x以降は、テンプレートの扱いがより厳密になったので、以前コンパイルできていたものができなくなることが多々あります。


いずれにしても、実際に状況が再現する正確なコードがないと、正確なことはいえません。
    • good
    • 0

テンプレートに関して、


VC7ではコンパイルがとおり、VC6では通らない
という経験をしたことがあります。
コンパイラによっては、仕様どおりの実装ができていないこともあるようですので、
コンパイラのバグと言うことも考えられないかなぁと思います。
    • good
    • 0

よくわかりませんが、



> class myclass3 : public myclass1<myclass3>

の部分を見る限りでは、myclass1にはテンプレート引数が必要かと思います。
テンプレートの時点ではmyclass1は仮の名前だったのが、テンプレートが具現化した時点で、その素性がはっきりしたためにエラーになったのだと思います。

ところで、piyoは静的データメンバの間違いでしょうか?

この回答への補足

御回答ありがとうございます。

すみません。piyoは正確には
static myclass1* piyo;
です。

その後の状況ですが、上記コードでVCでも
コンパイルできました。

やはり、GCC3.4.2だけ通りません

補足日時:2005/11/05 09:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!