c ++中类的定义

时间:2014-04-04 12:57:24

标签: c++ class

有人可以向我解释为什么这个例子不起作用?我真的不知道问题出在哪里。

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);

提前谢谢。

5 个答案:

答案 0 :(得分:2)

您收到的错误表明,班级test中的方法test private 。这是因为class的默认访问修饰符为private(而structpublic)。因此,如果您在class中声明某些成员或方法,并且未明确指定访问修饰符(publicprotectedprivate),则它将为{{ 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之前!