クラステンプレートと静的メンバ変数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
newton

クラステンプレートと静的メンバ変数

#1

投稿記事 by newton » 14年前

こんにちは。
表題の件につき、コンパイルエラーを修正できずにいる状態でございます。
改善方法をご存知の方がいらっしゃいましたらご助言頂きたくお願い致します。

環境:Windows7 64bit
コンパイラ:Visual Studio 2008
言語:C++(非CLR)

template <class T>
class Foo
{
// 中略

private:
// 静的メンバ変数
static const Hoo mHoo;
};
template <class T>
const Hoo Foo<T>::mHoo(); // コンパイルエラー

// コンパイラ出力
// error C4519: 既定のテンプレートの引数をクラスのテンプレート以外で使用することはできません

クラステンプレートに静的メンバ変数を所有させたいのですが、
変数の定義をどのように記述したらよいかがノーアイデア状態です。
(整数型であれば宣言・定義をクラス宣言内で記述できますが・・・)

宜しくお願い致します。

hoge

Re: クラステンプレートと静的メンバ変数

#2

投稿記事 by hoge » 14年前

Hooが定義が書かれていないので、詳しくは分からないが、
Hooを適当に定義して
>>emplate <class T>
>>const Hoo Foo<T>::mHoo(); // コンパイルエラー
なぜ、データメンバとして宣言したのに、関数メンバとして定義し直すの?
ここの()を削除したらコンパイルできたよ。

>>// error C4519: 既定のテンプレートの引数をクラスのテンプレート以外で使用することはできません
このエラーメッセージが出ると言うことは多分、Hooの定義がおかしいんだろうと思う

newton

Re: クラステンプレートと静的メンバ変数

#3

投稿記事 by newton » 14年前

お騒がせしてすみません。
確かにコンパイルが通ります。

本件、前述のコードは簡略化しており、簡略化した時点で問題が解消しておりました。
実際のクラス宣言は
template <class T1, class T2 = &T1>
class Foo
{
static const Hoo mHoo;
};
template <class T1, class T2 = &T1>
const Hoo Foo<T1, T2>::mHoo("Hoo");
のようにしており、静的メンバ変数の定義を
template <class T1, class T2>
const Hoo Foo<T1, T2>::mHoo("Hoo");
と改めることでエラーが解消しました。

閉鎖

“C言語何でも質問掲示板” へ戻る