如何修复此程序中的错误以及为什么我得到它?

时间:2016-03-24 23:21:45

标签: c++ c c++11

错误是:

  • 对'name'的引用含糊不清
  • 对'年龄'的提及含糊不清
  • 成员'input1'的请求不明确
  • 没有匹配函数来调用'ashish3 :: inputage()'

这是我的代码:

#include <iostream>
#include <string>

using namespace std;

class ashish
{
protected:
    string name;
public:
    void input1(string name1)
    {
        cin >> name1;
        name = name1;
    }

    int age;
};

class ashish2 : public ashish
{
public:
    void inputage(int age1)
    {
        cin >> age1;
        age = age1;
    }

    void display()
    {
        cout << name;
    }
};

class ashish3 : public ashish, public ashish2
{
public:
    void showme()
    {
        cout << "the name is" << name << endl << "the age is " << age << endl;
    }
};

int main()
{
    ashish3 rocker;
    rocker.input1();
    rocker.inputage();
    rocker.display();
    rocker.showme();
    return 0;
}

2 个答案:

答案 0 :(得分:1)

您的代码存在两个主要问题:

  1. 您的inputage方法需要一个整数,但您可以在没有参数的情况下调用它。要修复它,只需将age1作为局部变量而不是参数(没有理由将它作为参数)。

  2. 您的ashish3课程继承自ashishashish2。继承自ashish2后,它还会再次从ashish继承,因为ashish2本身继承自ashish,导致从ashish继承两次。因此,ashish的所有成员都存在于ashish3两次,导致前三个模糊错误。要绕过它,只能从ashish3ashish2)继承class ashish3 : public ashish2

答案 1 :(得分:0)

#include <iostream>
#include <string>
using namespace std;

class ashish
{
protected:
    string name;
public:
    void input1(string name1) {
        cin >> name1;
        name = name1;
    }
    int age;
};
class ashish2 :public ashish
{
public:
    void inputage(int age1) {
        cin >> age1;
        age = age1;
    }
    void display()
    {
        cout << name;
    }
};
class ashish3 : public ashish2
{
public:
    void showme()
    {
        cout << "the name is" << name << endl << "the age is " << age << endl;
    }
};
int main()
{
    ashish3 rocker;
    rocker.input1("xasdas");
    rocker.inputage(123);
    rocker.display();
    rocker.showme();
    return 0;
}

你有一些错误,你没有用参数调用你的函数。您没有添加应添加的<string>标头。并且你不应该让ashish3继承ashish1和ashish2,因为ashish2继承所有函数和变量ashish class。 C ++是一种与C不同的语言请删除C标签。