0

我正在使用libsourcey lib 进行学习。我尝试编写一个继承名为Signal的类的新类。

在 libsourcey 中

template <typename RT> class Signal;
template <typename RT, typename... Args> class Signal<RT(Args...)> {...}

和我的方式

template <typename RT> class NewSignal;
template <typename RT, typename... Args> class NewSignal<RT(Args...)> : public Signal<RT(Args...)> {...}

但我无法访问信号类的任何属性,也无法访问属性(尽管我将属性修改为公共)。编译器(eclipse)报告:was not declared in this scope

例子

我有2节课

B类

template<class RT> class B;

template<class RT, class... Args>
class B<RT(Args...)> {
public:
    B(int value = 0) : m_i(value) {}
    ~B() {}
    void print() {
        std::cout << "i = " << m_i << std::endl;
    }
    int m_i;
};

A级

template<class RT> class A;

template<class RT, class... Args>
class A<RT(Args...)> : public B<RT(Args...)> {
public:
    A(int value = 0) : B<RT(Args...)>(value) {}
    virtual ~A() {}
    void print() {
        std::cout << "i = " << 2 * m_i << std::endl;
    }
};

构建时出现错误 在此处输入图像描述

和 main.cpp

#include "Aclass.hpp"
#include "Bclass.hpp"

int main(int argc, char* argv[]) {
    B<void(void)> b(1);
    b.print();
    A<void(void)> a(2);
    a.print();
    return 0;
}

但是当我std::cout << "i = " << 2 * m_i << std::endl;在 A 类中更改为std::cout << "i = " << 2 * B<RT(Args...)>::m_i << std::endl;然后构建完成时,没有错误。

任何人都可以解释为什么编译器会这样报告。我如何继承 Signal 类。如果没有,有什么解决办法吗?感谢支持。

4

0 回答 0