【发布时间】:2021-02-10 11:27:27
【问题描述】:
我在传感器库开发中使用嵌套类并遇到错误。下面是示例代码和解释。
MainClass.cpp
class MainClass
{
public:
class nested_class;
void func1(){
nested_class1.print();
}
};
NestedClass.cpp
class MainClass::nested_class
{
public:
virtual void print() = 0;
};
Nested1.cpp
class nested_class1: virtual public MainClass::nested_class{
public:
void print();
};
void nested_class1::print(){
cout<<"This is for 1\n";
}
Nested2.cpp
class nested_class2 : virtual public MainClass::nested_class{
public:
void print(){
cout<<"This is for 2";
}
};
我正在尝试使用它来扩展我的传感器库中的抽象概念。但是这样做会出现以下错误: print() 未在此范围内声明。
我是这个概念的新手,因此很难在这里找到问题。我在哪里错了?如果需要,我可以提供更多详细信息。
提前致谢!
【问题讨论】:
-
您不能从不完整的类类型继承。
-
只有一些一般提示:在类内部类的更全局范围内的公共继承通常可能是一个设计缺陷,并且仅针对您的特定代码,虚拟继承很可能不是必需的。此外,您应该在派生类中使用 override 标记您的 print() 方法,以使此处的内容更清晰。
-
@Secundi 清除对虚拟继承的要求:我有一个传感器库,旨在跨不同平台提供其功能。因此,相同的函数将具有针对不同框架的实现,因此在这种情况下是不可避免的。
标签: c++ c++11 inner-classes virtual-functions