[解決済み] テスト
2022-01-27 16:06:40
質問
私はテンプレートクラスを前方宣言する必要があるいくつかのコードを持っています(または、少なくとも、前方宣言は私にとって物事をはるかに容易にする...)。私が抱えている問題の簡略版を書きましたので、ここに表示することができます。
template<bool>
class MyTemplateClass;
int main( int argc, char* argv[] )
{
MyTemplateClass<false> myTemp; // error here
myTemp.GetTheValue();
return 0;
}
template<bool bShouldMult>
class MyTemplateClass
{
int m_myint;
float m_myfloat;
public:
MyTemplateClass() : m_myint(5), m_myfloat(3.0f) {}
float GetTheValue()
{
return m_myint * (bShouldMult ? m_myfloat : 1.0f);
}
};
コメントされた行で出ているエラーは
Error - implicit instantiation of undefined template 'MyTemplateClass<false>'
MyTemplateClassの前方宣言には、他にどのような詳細を含める必要があるのでしょうか?エラーは次の行から来ないので、私はそれがメソッドが未定義であるという事実のためではないと仮定しています。使用しているコンパイラはLLVM/CLangで、Macでコンパイルしています。
どのように解決するのですか?
テンプレートであろうとなかろうと、任意の型の変数を宣言するためには、その型の定義全体が利用可能でなければなりません。テンプレートを前方に宣言して、あたかもそれが定義されているかのように使い始めることはできません。その時点でできることは、テンプレートに基づく型のオブジェクトへのポインタを、このように宣言することだけです。
MyTemplateClass<false> *myTempPtr; // No error here
残念ながら(予想通りではありますが)、これでエラーは次の行に移動しました。このポインタの初期化という問題は残っています。
new MyTemplateClass<false>
というエラーが表示されます。
テンプレートの定義を使用する場所より先に移動するように、コードを整理し直す必要があります。コンパイラは、テンプレートのインスタンス化とそのメソッドの呼び出しを開始する時点で、定義全体を把握する必要があるのです。
関連
-
スクリプトとバッチ処理がひとつに
-
linux シェル学習ノート 2日目
-
[解決済み】プッシュしようとするとGitエラーになる -- pre-receive フックが減少した
-
[解決済み】以下の追跡されていないワーキングツリーファイルは、マージによって上書きされますが、私は気にしません。
-
[解決済み】アプリケーション起動メソッドで例外が発生 java.lang.reflect.InvocationTargetException
-
[解決済み】C++で「Xは型名ではありません」エラー
-
[解決済み】データフレームで関数を適用する場合、dim(X)は正の長さでなければならない
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] フォワード宣言はどのような場合に使用できますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スクリプトとバッチ処理がひとつに
-
パスワード入力を非表示にする InstallShield スクリプト
-
[解決済み] file(file, "rt") のエラー : complete.cases プログラム内の無効な 'description' 引数
-
[解決済み】C++エラー: 予想されるunqualified-idを修正する方法
-
[解決済み】入力文字列のフォーマットが正しくない
-
[解決済み】C++の<map>に相当するC#は何ですか?[重複しています]
-
[解決済み】recyclerview アダプタが添付されていないため、レイアウトをスキップしています。
-
[解決済み】 c++ "Incomplete type not allowed" クラス参照情報へのアクセスエラー (前方宣言による円環状依存性)
-
[解決済み] MIPSのフェッチアドレスがワード境界にアライメントされていないため、.align 4を使用したが、まだうまくいかない
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない。