【问题标题】:why getting errors in c++ program?为什么在 C++ 程序中出现错误?
【发布时间】:2013-09-29 10:56:48
【问题描述】:

我想我已经在这个程序中正确编码了所有内容,但仍然出现错误。 对象si 表示无法访问。

#include<conio.h>
#include<iostream.h>

class s_interest
{
    int p,t;
    float r;
    s_interest(int a, int b, float c)
    {
        p=a;
        r=b;
        t=c;
    }

    void method()
    {
        int result=(float)(p*t*r)/100;
        cout<<"Simple interest:"<<result;
    }
};

void main()
{
    int pr,ti;
    float ra;
    cout<<"\n Enter the principle, rate of interest and time to calculate Simple Interest:";
    cin>>pr>>ti>>ra;
    s_interest si(pr,ti,ra);
    si.method();
}

【问题讨论】:

  • 标题和解释都不是很好。下次请至少在标题中说明您的问题。

标签: c++ class object


【解决方案1】:

当编译器告诉您某些内容不可访问时,它是在谈论 public:protected:private: 访问控制。默认情况下,一个类的所有成员都是private:,所以你不能从main()访问它们中的任何一个,包括构造函数和方法。

要使构造函数public,在您的类中添加public: 部分,并将构造函数和方法放在那里:

class s_interest
{
    int p,t;
    float r;
public: // <<== Add this
    s_interest(int a, int b, float c)
    {
        ...
    }
    void method()
    {
        ...
    }
};

【讨论】:

    【解决方案2】:

    class 的默认成员访问权限是 private(而 struct 的默认成员访问权限是 public)。你需要制作构造函数和method()public

    class s_interest
    {
      int p,t;  // private
      float r;  // also private
    
    
    public: // everything that follows has public access
    
      s_interest(int a, int b, float c) { .... }
      void method() { ....}
    };
    

    还要注意void main() 不是标准的 C++。返回类型需要为int,所以需要

    int main()
    {
      ...
    }
    

    最后,iostream.h 不是标准的 C++ 标头。如果您使用的是符合标准的 C++ 实现,则需要包含 &lt;iostream&gt;

    【讨论】:

    • 为什么每个人都说使用iostream 而不是iostream.h?我同意iostream.h 不是标准头文件,但除此之外,还需要指出编译器的更改,如果 OP 使用像 Turbo C++ 这样的已有十年历史的编译器并简单地更改此头文件,将引发编译器错误。
    • @P0W 我们在这里讨论的是标准 C++。如果问题涉及预标准编译器,那么应​​该由 OP 来指出该要求。无论如何,我已经限定了我的最后一句话。
    【解决方案3】:

    遵循高完整性 C++ 编码标准指南,始终首先声明 public,然后是 protected 和 private 成员。见Rule 3.1.1 of hicpp-manual-version-3-3.pdf

    【讨论】:

    • 在您回答此问题后大约 4 天,HIC++ V4.0 已上传至codingstandard.com/section/index。规则已完全重写,主要是为了涵盖自 2011 年以来的 C++ 语言功能。碰巧的是,不再有关于类中成员的可访问性顺序的规则。
    【解决方案4】:

    类中的所有变量和函数都是私有的。当未使用 private:protected:public: 说明符指定访问权限时,这是默认设置。我建议你好好阅读一个教程 - google C++ classes。

    它也是int main() 而不是void main()

    【讨论】:

      【解决方案5】:

      问题是由于访问说明符造成的。默认情况下,类方法和数据成员是私有的。将您的数据成员设为私有,将方法设为公开。因此您可以使用公共方法设置私有数据成员的值。

      class{
      private:
      int a;
      int b;
      int c;
      public:
      
      void method();
      void print_sum();
      
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-30
        • 2014-11-29
        相关资源
        最近更新 更多