C++ 如何从c+中所有成员都是公共的封闭类访问嵌套类成员函数+;?
我在传感器库开发中使用嵌套类,并遇到错误。下面是示例代码和说明 MainClass.cppC++ 如何从c+中所有成员都是公共的封闭类访问嵌套类成员函数+;?,c++,c++11,inner-classes,virtual-functions,C++,C++11,Inner Classes,Virtual Functions,我在传感器库开发中使用嵌套类,并遇到错误。下面是示例代码和说明 MainClass.cpp class MainClass { public: class nested_class; void func1(){ nested_class1.print(); } }; NestedClass.cpp class MainClass::nested_class { public: virtual void print() =
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";
}
classnested\u类1:虚拟公共MainClass::nested\u类{
公众:
作废打印();
};
void嵌套_class1::print(){
coutnested_class1.print();
不是调用nested_class1
实例的print
成员的方式,即使它在前面声明过
MainClass::func1
的定义必须在nested_class1
的定义之后,后者必须在MainClass::nested_class1
的定义之后
#include <iostream>
class MainClass
{
public:
class nested_class;
void func1();
};
class MainClass::nested_class
{
public:
virtual void print() = 0;
};
class nested_class1: virtual public MainClass::nested_class{
public:
void print();
};
class nested_class2 : virtual public MainClass::nested_class{
public:
void print();
};
void MainClass::func1() {
nested_class1 obj;
obj.print();
}
void nested_class1::print(){
std::cout<<"This is for 1\n";
}
void nested_class1::print(){
std::cout<<"This is for 2";
}
int main(){
MainClass instance;
instance.func1();
}
#包括
类主类
{
公众:
类嵌套(u类),;
void func1();
};
类MainClass::嵌套的_类
{
公众:
虚空打印()=0;
};
类嵌套的\u类1:虚拟公共MainClass::嵌套的\u类{
公众:
作废打印();
};
类嵌套的\u类2:虚拟公共MainClass::嵌套的\u类{
公众:
作废打印();
};
void MainClass::func1(){
嵌套_类1对象;
obj.print();
}
void嵌套_class1::print(){
std::coutYou无法从不完整的类类型继承。只有一些一般提示:类内部类的更全局范围内的公共继承通常可能是一个设计缺陷,仅针对您的特定代码,此处不太可能需要虚拟继承。此外,您应该标记print()方法在派生类中进行重写,以使此处的内容更清晰。@Secundi清除虚拟继承的要求:我有一个传感器库,打算跨不同平台提供其功能。因此,相同的函数将针对不同的框架进行实现,因此在这种情况下是不可避免的。我理解如果所有类都放在同一个文件夹中,则可以这样做。如果所有类都位于不同的源文件中,那么顺序又有什么关系呢?我有一个巨大的传感器库,它分布在不同的文件中,因此有一个问题。MainClass
的定义需要是\include
d来定义嵌套类ss1
(和2),需要包含嵌套类1
的定义来定义MainClass::func1
传统上,这是通过在头文件(通常为.h或.hpp)中定义类定义,在非头文件(通常为.cpp)中定义类成员函数来实现的
#include <iostream>
class MainClass
{
public:
class nested_class;
void func1();
};
class MainClass::nested_class
{
public:
virtual void print() = 0;
};
class nested_class1: virtual public MainClass::nested_class{
public:
void print();
};
class nested_class2 : virtual public MainClass::nested_class{
public:
void print();
};
void MainClass::func1() {
nested_class1 obj;
obj.print();
}
void nested_class1::print(){
std::cout<<"This is for 1\n";
}
void nested_class1::print(){
std::cout<<"This is for 2";
}
int main(){
MainClass instance;
instance.func1();
}