为什么这个程序没有编译

时间:2014-02-02 14:33:41

标签: c++

#include <iostream>
class Abc // created class with name Abc
{
    void display()//member function
    {
        cout<<"Displaying NO."<<endl;
    }
};
int main()
{
    Abc obj;//creating object of the class
    obj.display();//calling member function inside class
}

它返回错误

main.cpp: In function 'int main()':
main.cpp:5:10: error: 'void Abc::display()' is private
     void display()
          ^
main.cpp:13:17: error: within this context
     obj.display();
                 ^

我曾尝试制作显示功能public int main,但之后它会出错

main.cpp:5:11: error: expected ':' before 'void'
    public void display()
           ^

2 个答案:

答案 0 :(得分:5)

声明为:

class Abc
{
public:

    void display()
    {
        cout<<"Displaying NO."<<endl;
    }
};

或:

struct Abc
{
    void display()
    {
        cout<<"Displaying NO."<<endl;
    }
};

struct 的默认保护是公开的,的默认保护是私有的

答案 1 :(得分:1)

错误消息足够清楚。您不能在课外调用私有成员函数。默认情况下,具有关键字class的类具有私有访问控制。写下

class Abc // created class with name Abc
{
public:
 void display()//member function
    {
        cout<<"Displaying NO."<<endl;
    }
};

struct Abc // created class with name Abc
{
 void display()//member function
    {
        cout<<"Displaying NO."<<endl;
    }
};

默认情况下,带有关键字struct的类具有公共访问控制。

最好将成员函数定义为

 void display() const//member function
 {
        std::cout<<"Displaying NO."<<endl;
 }

考虑到你没有使用directibe

using namespace std;

您必须对std ::中声明的实体使用限定名称。例如

        std::cout<<"Displaying NO."<<std::endl;