首页 > 解决方案 > 如何从所有成员在 C++ 中公开的封闭类访问嵌套类成员函数?

问题描述

我在传感器库开发中使用嵌套类并遇到错误。下面是示例代码和解释。

主类.cpp

class MainClass
{
 public:      
     class nested_class;
     void func1(){
       nested_class1.print();
     }
};

嵌套类.cpp

class MainClass::nested_class
{
 public:
      virtual void print() = 0;
};

嵌套1.cpp

class nested_class1: virtual public MainClass::nested_class{
    public:
        void print();
};
void nested_class1::print(){
        cout<<"This is for 1\n";
    }

嵌套2.cpp

class nested_class2 : virtual public MainClass::nested_class{
    public:
    void print(){
        cout<<"This is  for 2";
    }
};

我正在尝试使用它来扩展我的传感器库中的抽象概念。但是这样做会出现以下错误: print() is not declared in this scope

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

提前致谢!

标签: c++c++11inner-classesvirtual-functions

解决方案


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

的定义MainClass::func1必须在 的定义之后nested_class1,而 的定义必须在 的定义之后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();
}

现场观看


推荐阅读