对象无法访问其私有数据。错误:在此上下文中为private

时间:2018-02-17 18:38:19

标签: c++

我是一个c ++新手。我有一个简单的课程,存储一个人的姓名和年龄。 由于某些原因,类的对象无法访问私有数据。当我运行下面的代码时,我得到错误:Test :: name在此上下文中是私有的。

标头文件

namespace Testing {

    class Test {
        public:
            Test(); // initializes to 0
            Test(int age_, std::string name_);
        private:
            int age;
            std::string name;
    };
}

实施档案:

#include <string>
#include "Test.h"

using namespace std;
using namespace Testing;

Test::Test(){
    age = 26;
    name = "George";
}

Test::Test(int age_, string name_){
    age = age_;
    name = name_;
}

主要

#include <iostream>
#include "Test.h"

using namespace std;
using namespace Testing;

int main(){

    Test test;    
    cout << test.name << endl;

    return 0;
}

3 个答案:

答案 0 :(得分:2)

您正试图从main函数访问您班级的私人成员。它不是访问私有数据的“对象”(并且不清楚你的意思),它是试图访问该数据的函数main。函数main无权访问您的类的私有成员。因此错误。

答案 1 :(得分:0)

对象无法直接访问私人数据。 只有类的成员函数才能访问它。 因此,尝试编写成员函数(类中的函数)或将变量(年龄,名称)设置为公共,如

  

班级考试{

     

公共:

     

测试(); //初始化为0

     

测试(int age_,std :: string name _);

     

int age;

     

std :: string name;

     

};

Refer this for using private data member

或者创建好友功能

Refer this for using friend functions

答案 2 :(得分:0)

您的问题是您尝试访问private数据(名称),因此您需要使用公开getter或公开成员数据:

std::string Test::getName()const{
    return name;
}

主要是:

//cout << test.name<< endl;
std::cout << test.getName() << endl;
相关问题