こんにちは。
表題の件につき、コンパイルエラーを修正できずにいる状態でございます。
改善方法をご存知の方がいらっしゃいましたらご助言頂きたくお願い致します。
環境: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: クラステンプレートと静的メンバ変数
Hooが定義が書かれていないので、詳しくは分からないが、
Hooを適当に定義して
>>emplate <class T>
>>const Hoo Foo<T>::mHoo(); // コンパイルエラー
なぜ、データメンバとして宣言したのに、関数メンバとして定義し直すの?
ここの()を削除したらコンパイルできたよ。
>>// error C4519: 既定のテンプレートの引数をクラスのテンプレート以外で使用することはできません
このエラーメッセージが出ると言うことは多分、Hooの定義がおかしいんだろうと思う
Hooを適当に定義して
>>emplate <class T>
>>const Hoo Foo<T>::mHoo(); // コンパイルエラー
なぜ、データメンバとして宣言したのに、関数メンバとして定義し直すの?
ここの()を削除したらコンパイルできたよ。
>>// error C4519: 既定のテンプレートの引数をクラスのテンプレート以外で使用することはできません
このエラーメッセージが出ると言うことは多分、Hooの定義がおかしいんだろうと思う
-
newton
Re: クラステンプレートと静的メンバ変数
お騒がせしてすみません。
確かにコンパイルが通ります。
本件、前述のコードは簡略化しており、簡略化した時点で問題が解消しておりました。
実際のクラス宣言は
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");
と改めることでエラーが解消しました。
確かにコンパイルが通ります。
本件、前述のコードは簡略化しており、簡略化した時点で問題が解消しておりました。
実際のクラス宣言は
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");
と改めることでエラーが解消しました。