Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从c+中所有成员都是公共的封闭类访问嵌套类成员函数+;?_C++_C++11_Inner Classes_Virtual Functions - Fatal编程技术网

C++ 如何从c+中所有成员都是公共的封闭类访问嵌套类成员函数+;?

C++ 如何从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() =

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

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";
    }
classnested\u类1:虚拟公共MainClass::nested\u类{
公众:
作废打印();
};
void嵌套_class1::print(){
cout
nested_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();
}