相关疑难解决方法(0)

"未在此范围内声明"模板和继承错误

这是代码示例,它可以重现我的问题:

template <typename myType>
class Base {
public:
    Base() {}
    virtual ~Base() {}
protected:
    int myOption;
    virtual void set() = 0;
};

template <typename InterfaceType>
class ChildClass : public Base < std::vector<InterfaceType> >
{
public:
    ChildClass() {}
    virtual ~ChildClass() {}
 protected:
    virtual void set();
};

template <typename InterfaceType>
void ChildClass<InterfaceType>::set()
{
     myOption = 10;
}
Run Code Online (Sandbox Code Playgroud)

我的用法main():

ChildClass<int> myObject;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误(ubuntu上的gcc 4.4.3):

'myOption'未在此范围内声明

如果我的ChildClass没有新的模板参数,这将工作正常,即:

class ChildClass : public Base < std::vector<SomeConcreteType> >
Run Code Online (Sandbox Code Playgroud)

编辑

如果我的set方法如下所示,我已设法解决它:

Base<std::vector<InterfaceType> >::myOption = 10;
Run Code Online (Sandbox Code Playgroud)

它工作正常.尽管不确定为什么我需要指定所有模板参数.

c++ inheritance templates compiler-errors g++

26
推荐指数
2
解决办法
2万
查看次数

在C++中继承模板类

可能重复:
C++继承的模板类无权访问基类

我遇到了模板和继承问题.简单地说,我有一个模板类,我希望从中继承另一个模板类.我不明白为什么基类的成员在派生类中不可见?虽然不使用模板,但一切都按预期工作.例如:

template <typename T>
class Foo
{
public:
    T x;
    T y;
    void doX(){ x = x+1; }
    void doY(){y++;}
protected:
    T a;
    T b;
    void doA(){a++;}
};

template <typename T>
class Bar : public Foo<T>
{
public:
    void doX(){x++; y++;} // ERROR
    void doY(){x++; y++;} // ERROR
    void doA(){a++;b++;}  // ERROR
};
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates

0
推荐指数
2
解决办法
196
查看次数

标签 统计

c++ ×2

inheritance ×2

templates ×2

compiler-errors ×1

g++ ×1