无法从Visual Studio C ++中的另一个类访问一个类

BHOS

我正在尝试在Visual Studio(2017)C ++中利用wxWidgets。我创建了两个类。即cApp.h和cMain.h。然后,我尝试在cApp中创建Cmain的新实例。但是,它出现以下错误:

Error   C2248   'cMain::cMain': cannot access private member declared in class 'cMain'

当我将鼠标悬停在Visual Studio的“解决方案资源管理器”中的.h文件上时,它表明它是私有的。我删除了它们并手动创建了它们。但是,结果相同。如何将其更改为公开?非常感谢你 :)

应用程序

#pragma once
#include "wx/wx.h"
#include "cMain.h"

class cApp : public wxApp
{
public:
    cApp();
    ~cApp();

private:
    cMain* m_frame1 = nullptr;

public:
    virtual bool OnInit();
};

cApp.cpp

#include "cApp.h"

wxIMPLEMENT_APP(cApp);

bool cApp::OnInit()
{
    m_frame1 = new cMain(); // This is the part that gives error
    m_frame1->Show();

    return true;
}

cMain.h

#include "wx/wx.h"

class cMain : public wxFrame
{
    cMain();
    ~cMain();
};

cMain.cpp

#include "cMain.h"

cMain::cMain() : wxFrame(nullptr, wxID_ANY, "First App")
{

}

cMain::~cMain()
{

}
约瑟

编译器是正确的,cMain是private在C ++中,类的成员默认情况下是私有的,这主要是因为有保护模型。摘自“ C ++的设计与演化”(Bjarne Stroustrup):

只有放置在类声明中的声明(假定由其所有者拥有)才能授予访问权限。默认情况下,所有信息均为私人信息。

通过在类声明的公共部分中声明成员或通过将函数或类指定为朋友来授予访问权限。

因此,基本上,应该显式地制作类的公共部分public,或使用关键字friend

来自“ C ++编程语言”(Bjarne Stroustrup):

在班级中,成员默认情况下是私有的;在结构中,默认情况下成员是公共的(第16.2.4节)。

考虑到C ++的基准是C(结构的成员是公共的),这比C ++中的结构的成员也很正常public

因此,为了解决该错误,您可以明确地将其公开

class cMain
{
    public:
    cMain(){};
    ~cMain(){};
};

或使用结构代替类。

struct cMain
{
    cMain(){};
    ~cMain(){};
};

或指定cMain一个friendcApp

关于继承,这篇文章非常有帮助:私有,公共和受保护的继承之间的区别

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Intellij无法从另一个模块中的一个模块访问类

如何从Visual Studio 2013 Ultimate中的另一个项目导入类

C ++在另一个类头文件中声明一个类

如何将用另一个项目的C语言编写的源代码包含到Visual Studio中的C ++中我自己的项目中

如何创建一个类,该类是C ++中另一个类的向量?

无法从一个类到另一个类获取一个int值:Android Studio

我是C ++的初学者。我在Visual Studio 2019(C ++ 17)中研究它,我已经在.h文件中定义了一个类,但是在另一个.h文件中我无法使用它

是否可以将静态方法移至另一个类并在Visual Studio上同时进行重构?C#

Visual Studio解决方案(.sln)/ C#:使用另一个项目的dll作为参数启动一个项目

如何将一个类访问另一个C#类

无法从另一个类访问NSMutableArray

如何从同一解决方案访问另一个项目?(Visual Studio 2012)

C ++从另一个类访问类成员

C#无法从另一个类更改窗体的组件

如何在C#/ Visual Studio的文件夹中调用一个类?

从Visual C#中的另一个类调用动态方法

无法从另一个类访问公共委托

无法从另一个类访问资源

无法从java中的另一个类访问一个类

在 Visual Studio 中创建一个 C++ 项目

C++ 新手:无法从继承自另一个类的类设置类构造函数

c++ 类函数在另一个函数中无法按预期工作

目标 C:如何访问 AppDelegate 中另一个类中声明的类?

将代码从一个解决方案复制到另一个 c# (Visual Studio)

从另一个类访问 C# 类

如何从同一类 C# 中的另一个方法访问一个方法的变量?

无法从 Java Android Studio 中的另一个类调用变量

我创建了一个类女巫是同一命名空间中另一个类的子类。但 Visual Studio 无法识别父类中的受保护字段

从另一个 C++ 文件访问类

TOP 榜单

热门标签

归档