0

かなりばかげた質問だと確信していることをお詫びしますが、それを機能させることはできません!

また、どの情報が多すぎるのかわからないので、おそらく十分な情報を提供しないので、それについても申し訳ありません。質問してください。

main.cpp内でクラスを書き始めましたが、大きくなったので、別のソースファイルにシフトすることにしました。私はこれを行う方法についてあまりよくわかりません、そしてインターネットリソースからこの特定の問題を修正するのを助けるために何も理解することができません(それ故に尋ねます)。

私は、メインプログラム関数の上のすべての関数定義を含むクラス定義から始めました。これは正常に実行されます。次に、これを2つの別々の部分に分割します。main関数の上にあるクラス宣言(これが正しい用語だと思います)とmain関数の下にある関数定義。

これも完璧に動作します。クラス宣言をヘッダーファイルに切り出しました。このヘッダーファイルの形式は

#ifndef INC_MATRIX_H
#define INC_MATRIX_H
class matrix{
//ETC
};
#endif

どこかで読んだことは役に立ちますが、理由はよくわかりません。ヘッダーが複数回含まれている場合は、関数の再宣言を停止することだと思います。

そのため、現在、このヘッダーファイルは他のインクルードと一緒にインクルードされています。次に、メイン関数、次にメイン関数の下の関数定義。これもコンパイルされ、完全に実行されます。

私が取った次のステップは、関数定義を独自の個別の.cppファイルにカットすることでした。この.cppファイルに加えられた唯一の追加は、いくつかの追加のインクルードを先頭に追加する必要があることでした(具体的にはiostreamとcstdlib)。また、matrix.hファイルも含まれていました。

この構成では、コードをコンパイルして実行しようとすると、Dev-C++でリンカーエラーが発生します。具体的には、それらは次の形式です。

[リンカーエラー]未定義の参照matrix <bool>::matrix(int, int)

そして、コードは実行されません(明らかに)。どうすればこれを修正できますか?前もって感謝します。

編集:これは、テンプレート化されたクラスであり、matrix.cppファイルのスコープ内でテンプレートがbool型に導入されていないことが原因であることが判明しました。ここで、多くのコード行を追加せずにこれを修正して、各関数が指定された各タイプを個別に受け入れるようにする方法を理解したいと思います。ああ、ヘッダーで関数を定義できることを感謝しています。しかし、私たちはそれをするつもりはなかったと思いましたか?宣言を含めるだけだと思いました。

4

2 に答える 2

1

プロジェクトにmatrix.cppを追加しなかったと思います。それをmatrix.oにビルドし、main.oにリンクして.exeを作成する必要があります。

于 2009-12-19T20:26:14.967 に答える
1

このエラーは、マトリックス クラスがテンプレート化されたクラスであることを示しています。それは...ですか?おそらくコードを投稿すると役立つでしょう。

テンプレート化されたクラスの場合、テンプレート化されたクラスをヘッダー/実装に分離する際の一般的な問題の説明と、この問題の解決策について、この FAQを参照してください。

于 2009-12-19T20:39:25.340 に答える