我有以下類 - Matrix<T>
類代表T
類型的對象的矩陣,它的超類baseMAtrix
保存一個靜態布爾變量parallel_
於所有類型的Matrix<T>
。C++模板類變化的靜態成員的值
我要訪問parallel_
但似乎我的代碼不鏈接 -
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;
}
};
我得到這個消息 -
`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
文件是我叫setParallel
-
Matrix<int>::setParallel(true);
這是撥打setParallel
的正確方法嗎?
這是訪問baseMatrix::_parallel
的正確方法嗎?
技術上你只需要定義變量。 'bool baseMatrix :: _ parallel;'在某個地方的全局範圍內。順便說一句,你可以通過避免全局變量(這是)避免了額外的工作,並且通過使用單個約定來對類型名稱進行大寫。 –
@ Cheersandhth.-Alf你是什麼意思?爲什麼MAtrix無法訪問其超類的成員? 我不能定義一個全局變量,因爲我不是要使用類 – proton
此外,而不是帶有前導下劃線的約定,考慮尾部下劃線(例如用於Boost)。領先的下劃線是一種用於不同事物的約定,即用於由實現定義的名稱。因此,在全局命名空間中保留了前導下劃線。 –