【问题标题】:cannot access private member declared in class 'Soldier'无法访问在“士兵”类中声明的私有成员
【发布时间】:2013-07-17 05:10:31
【问题描述】:

我是 OOP 新手,不明白如何将参数传递给类。

类的声明:

class Soldier
{
    Soldier(int SetHealth, int SetStrength);

private:
    int health;
    int strength;

public:
    void attacked();
    void healed();
    int getHealth();
    int getStrength();
};

构造函数的定义:

    Soldier::Soldier(int SetHealth, int SetStrength):
        health(SetHealth),
        strength(SetStrength)
    {

    }

当我尝试将参数传递给类时,它会这样说:

    1>------ Build started: Project: ConsoleApplication6, Configuration: Debug Win32 ------
    1>  ConsoleApplication6.cpp
    1>c:\users\user\documents\visual studio 2012\projects\consoleapplication6\consoleapplication6\consoleapplication6.cpp(11): error C2248: 'Soldier::Soldier' : cannot access private member declared in class 'Soldier'
    1>          c:\users\user\documents\visual studio 2012\projects\consoleapplication6\consoleapplication6\soldier.h(7) : see declaration of 'Soldier::Soldier'
    1>          c:\users\user\documents\visual studio 2012\projects\consoleapplication6\consoleapplication6\soldier.h(6) : see declaration of 'Soldier'
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

【问题讨论】:

  • class 默认访问说明符是 privare。 struct 是 public

标签: c++ class oop constructor private


【解决方案1】:

除非您将访问级别更改为 public 或 protected,否则类的成员隐式为 private,因此 Soldier::Soldier(int SetHealth, int SetStrength); 是私有的 - 因此您无法访问它。

【讨论】:

    【解决方案2】:

    您的构造函数是private(正如错误消息所说)。 默认情况下,如果您不指定访问级别,Class 的每个成员都是 private。

    【讨论】:

      【解决方案3】:

      您定义的构造函数的访问级别为

      private
      

      默认情况下,如果没有提及任何内容,则访问级别为私有 因此,将其更改为公开访问。

      【讨论】:

        【解决方案4】:

        将构造函数声明更改为此public Soldier(int SetHealth, int SetStrength);

        【讨论】:

        • 那是 C# - 你需要一个冒号
        【解决方案5】:

        人们现在已经回答了这个问题,但明确:

        class Soldier
        {
        private:
            int health;
            int strength;
        
        public:
            Soldier(int SetHealth, int SetStrength);
        
            void attacked();
            void healed();
            int getHealth();
            int getStrength();
        };
        

        顺便说一句,附着和治愈的东西会做什么?它们不带任何参数,也不返回任何内容。奇怪。


        编辑(鉴于最近的反对票):

        将构造函数移动到公共“部分”,使其成为public。事情从private 开始,直到你另有说明。

        【讨论】:

        • 我猜他们会在内部增加或减少health。
        • 或者打印,或者归零,... ;-)
        • 这个答案并没有以任何方式解释解决方案。
        猜你喜欢
        • 1970-01-01
        • 2017-04-20
        • 2012-11-15
        • 1970-01-01
        • 1970-01-01
        • 2018-07-22
        • 2014-08-23
        相关资源
        最近更新 更多