C++模板类更改静态成员的值

C++ template class change static member's value

本文关键字:静态成员 C++      更新时间:2023-10-16

我有以下类-类Matrix<T>表示类型为T的对象的矩阵,它的超类baseMAtrix保存所有类型Matrix<T>共有的静态布尔变量parallel_

我想访问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的正确方式吗

如果您想保持标题友好,您可以将基类更改为template:

template<class T>
class baseMatrix 
{
protected:
    static bool _parallel;
};
template<class T>
bool baseMatrix<T>::_parallel;
template<class T>
class Matrix : baseMatrix<void>
...

这样在cpp文件中就不需要baseMatrix::_parallel