如何从封闭 class 访问嵌套的 class 成员函数,其中所有成员在 C++ 中都是 public?

How to access nested class member function from enclosing class where all the members are public in c++?

我在传感器库开发中使用嵌套 类,运行 出错。下面是示例代码和解释。

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() 未在此范围内声明

我是这个概念的新手,因此很难在这里找到问题所在。我哪里错了?如果需要,我可以提供更多详细信息。

提前致谢!

nested_class1.print(); 不是您调用 nested_class1 实例的 print 成员的方式,即使它是在此之前声明的。

MainClass::func1的定义必须在nested_class1的定义之后,MainClass::nested_class的定义必须在MainClass::nested_class的定义之后。

#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();
}

See it live