有人可以向我解释为什么这个例子不起作用?我真的不知道问题出在哪里。
class test{
test();
test(const int n);
void show();
private:
int number;
};
test::test(const int n){
number = n;
}
void test::show(){
cout << number << endl;
}
int main(int argc, char** argv) {
test a(10);
return 0;
}
以下是错误:
main.cpp:33:1: error: ‘test::test(int)’ is private
test::test(const int n){
^
main.cpp:43:14: error: within this context
test a(10);
提前谢谢。
答案 0 :(得分:2)
您收到的错误表明,班级test
中的方法test
为 private
。这是因为class
的默认访问修饰符为private
(而struct
为public
)。因此,如果您在class
中声明某些成员或方法,并且未明确指定访问修饰符(public
,protected
,private
),则它将为{{ 1}}默认情况下。
只需改变:
private
为:
class test{
test();
test(const int n);
void show();
private:
int number;
};
答案 1 :(得分:1)
在C ++中,类成员和方法的默认访问限定符为private
。换句话说,如果您没有指定一个,这就是您所做的,它将默认为private
。以后您定义另一个private
段的几行不会改变这一点。因此,您需要做的是在类定义开始时添加public
段,它将按预期工作。
相反,如果您使用的是struct
而不是class
,则反之亦然。
答案 2 :(得分:0)
默认情况下,类成员是私有的,因此所有成员都是私有的,底部的“private:”子句是多余的。只需在“class test {”之后添加“public:”。
答案 3 :(得分:0)
首先,除非你指定public,protected,否则你在类体内写的所有成员都是私有的。因此,在您的情况下,成员函数是私有的,您需要在您需要在类外部访问的函数之前将访问限定符指定为public。
访问修饰符有助于实现封装。
除非您使用好友功能,否则您可以访问班级内的私人会员,但不能访问班级以外的人员。
class test{
private:
int number; //private member, Note: if I remove private from above this variable will still be private because by default it is private
public:
test();//default constructor
test(const int n);//parametrized constructor
void show()const;//show/display function, its better if you put const, this cannot modify your data member of your class
};
test::test(const int n)
{
number = n;
}
void test::show()
{
cout << number << endl;
}
int main(int argc, char** argv)
{
test a(10);
return 0;
}
谢谢。
答案 4 :(得分:0)
构造函数和所有其他成员函数在您的类中是私有的您必须编写公共:在编写它们的definations之前!