c++ - 如何从所有成员在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(); 不是您调用 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(); } 的定义之后。

public class Example extends Thread {

    private static int count;

    public static void main(String[] args) throws InterruptedException {
        Example t1 = new Example();
        Example t2 = new Example();
        
        t1.start();
        t2.start();
        
        t1.join();
        t2.join();
        
        System.out.println(count);
    }

    public void run() {
        for (int i = 0; i < 12000; i++) {
            addToCount();
        }
    }

    public synchronized void addToCount() {
        Example.count++;
    }
}

See it live