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

时间:2016-09-24 12:44:53

标签: c++ templates linker

我有以下课程 - class Matrix<T>代表T类型的对象矩阵,它是超类baseMAtrix,它包含所有类型的{{1}共有的静态布尔变量parallel_ }。

我想访问Matrix<T>,但似乎我的代码没有链接 -

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的正确方法吗?

1 个答案:

答案 0 :(得分:0)

如果你想保持对标题友好,你可以将基类更改为模板:

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

template<class T>
bool baseMatrix<T>::_parallel;

template<class T>
class Matrix : baseMatrix<void>
...

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