【问题标题】:Modifying private members of a class修改类的私有成员
【发布时间】:2016-03-21 22:19:33
【问题描述】:

我在更改课程的私人成员时遇到了一些问题。 下面是我的 main.cpp

#include "World.h"
#include "GameObject.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <string>

using namespace std;

//function prototypes
void setUserName();


int main()
{
    setUserName();
    return 0;
}

下面是我的 GameObject.h

#ifndef GAMEOBJECT_H
#define GAMEOBJECT_H
#include <string>

using namespace std;

class GameObject
{
private:
    string userName;

public:
    void setUserName();
};

#endif

下面是我的gameobject.cpp

#include "GameObject.h"
#include <string>
#include <iostream>

using namespace std;

void setUserName()
{
    cout << endl << "Function has been called" << endl;
    cin >> userName;
}

它目前告诉我 userName 没有在这个范围内声明,但我以为我在我的 .h 文件中声明了 任何提示将不胜感激!提前致谢!

【问题讨论】:

    标签: class c++11 private


    【解决方案1】:

    全局函数

    void setUserName();
    

    class GameObject内部声明的同名成员函数是两个不同的函数。只有成员函数才能访问私有成员。如果要在gameobject.cpp中定义成员函数,需要给出函数全名:

    void GameObject::setUserName {
        // ...
    }
    

    【讨论】:

      【解决方案2】:

      您实现了一个函数并将其命名为setUserName(),并声明了一个类GameObject 的方法并将其命名为setUserName()。只有方法能够访问私有变量。但是对于该方法没有实现。

      方法实现(在 gameobject.cpp 中)如下所示:

      void GameObject::setUserName()
      {
          cout << endl << "Function has been called" << endl;
          cin >> userName;
      }
      

      出于您的目的,我认为您甚至根本不需要全局函数 setUserName()

      【讨论】:

        猜你喜欢
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2011-02-24
        • 1970-01-01
        • 1970-01-01
        • 2017-12-22
        • 2021-07-30
        • 2019-12-29
        相关资源
        最近更新 更多