私は以下のクラスがある - タイプT
のオブジェクトのマトリックスを意味 クラスMatrix<T>
を、そしてそれはMatrix<T>
のすべてのタイプに共通の静的なブール変数parallel_
を保持しているスーパークラスbaseMAtrix
です。C++テンプレートクラスの変更静的メンバの値
私はparallel_
にアクセスしたいが、私のコードではなく、リンクないようだ -
setParallel
を呼ぶところ
`CMakeFiles/ex3.dir/Tester.cpp.o:Tester.cpp:(.rdata$.refptr._ZN10baseMatrix9_parallelE[.refptr._ZN10baseMatrix9_parallelE]+0x0): undefined reference to `baseMatrix::_parallel'
collect2: error: ld returned 1 exit status`
Tester.cpp
ファイルがある - 私はこのメッセージを
class baseMatrix {
protected:
static bool parallel_;
};
template<class T>
class Matrix : baseMatrix{
public:
static void setParallel (bool parallel){
if(parallel != baseMAtrix::parallel_){
cout << "message" << endl;
}
baseMAtrix::parallel_ = parallel;
}
};
取得します
Matrix<int>::setParallel(true);
はこれをsetParallel
と呼ぶ正しい方法ですか?
これは適切な方法ですbaseMatrix::_parallel
にアクセスしますか?
技術的には、変数を定義するだけです。 'bool baseMatrix :: _ parallel;'どこかのグローバルスコープで。ちなみに、グローバル変数(これはこれを避けてください)を避け、タイプ名の大文字小文字を区別するための単一の規約を使用することで、余計な作業を避けることができます。 –
@ Cheersandhth.-Alfどういう意味ですか?なぜMAtrixはそのスーパークラスのメンバーにアクセスできないのですか? クラスを使用するためにonwがないためグローバル変数を定義できません – proton
また、先頭にアンダースコアを付ける慣習の代わりに、末尾にアンダースコアを付けることを検討してください(例:Boostで使用)。先頭のアンダースコアは、さまざまなこと、つまり実装によって定義された名前のために使用される規約です。したがって、先頭のアンダースコアはグローバル名前空間に予約されています。 –