c++ - 如何修复该程序中的错误以及为什么我会收到它?

标签 c++ c c++11

错误是:

  • 对“名称”的引用不明确
  • 提及“年龄”不明确
  • 对成员“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;
}

最佳答案

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

  1. 您的 inputage 方法需要一个整数,但您调用它时不带参数。要修复此问题,只需将 age1 设为局部变量而不是参数(没有理由将其作为参数)。

  2. 您的 ashish3 类继承自 ashishashish2。通过继承 ashish2,它也再次继承 ashish,因为 ashish2 本身继承自 ashish,从而产生两次继承 ashish 。因此,ashish 的所有成员在 ashish3 中存在两次,导致前三个歧义错误。要解决这个问题,只需从 ashish2 继承 ashish3 (class ashish3 : public ashish2)。

关于c++ - 如何修复该程序中的错误以及为什么我会收到它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36211635/

相关文章:

c++ - 如何使用Rcpp初始化mappedsparsematrix

c++ - C++ 中 vector 的 insert 和 emplace 有什么区别

c++ - 为什么传递临时对象时不调用复制构造函数

c - 在 C 中使用 fork() 和 TCP 连接进行设计

c++ - 为什么 std::bind1st 不适用于自由函数?

c++ - AllocaInst 的使用示例 : LLVM

c - 运行时之前初始化的数据段值将存储在哪里?

c - 关于 Visual Studio 项目文件的问题

C++ 特殊成员函数

c++ - 将数字设置为小数点后的 float