gpt4 book ai didi

C++ expected unqualified-id(类继承)

转载 作者:行者123 更新时间:2023-11-28 05:23:00 33 4
gpt4 key购买 nike

我有一个包含 User 子类的应用程序。

目前,我正在尝试传递一个用于识别用户登录号的 int,但是,我在声明子类构造函数时遇到了问题。

用户.h

class User 
{
public:
User(int);
private:
int loginNumber;
};

用户.cpp

User::User(int theLoginNUmber)
:LoginNumber(theLoginNumber) { }

AdminUser.h

class AdminUser : public User
public:
AdminUser(int);
private:
int loginNumber;
};

管理员用户.cpp

AdminUser::User(int theLoginNumber) // requires unqualified-id
:loginNumber(theLoginNumber) {}

最佳答案

您对 Admin 用户构造函数的定义有误,这是正确的定义:

AdminUser::AdminUser(int theLoginNumber)
: User(theLoginNumber) { }

由于 User 没有默认构造函数,您必须从初始化部分调用参数构造函数。

但是 loginNumber 可以在 User 类中被保护:

class User {
public:
User(int);
protected:
int loginNumber;
};

现在您将 loginNumber 继承为 protected ,因此您在 AdminUser 中不需要它:

class AdminUser : public User
public:
AdminUser(int);
};

注意:它包含具有正确值(由构造函数设置)的 loginNumber。

正如@Mossi92 指出的那样,您可以更进一步,在 User 类中实现一个 getter,它也将被继承:

class User {
public:
User(int);
protected:
int loginNumber;

int login() const noexcept {
return loginNumber;
}
};

但是在这种情况下,您应该考虑哪个类访问修饰符是最好的 this 函数。我会说登录号应该是外部世界看不到的东西所以我选择了 protected 。现在只能从继承类或友元类调用此函数。

让我们添加在构造函数中调用继承函数的简单打印:

AdminUser::AdminUser(int theLoginNumber)
: User(theLoginNumber) {
std::cout << login() << "\n";
}

如果我们运行:

int main() {
AdminUser admin(1234);
return 0;
}

输出:

1234

关于C++ expected unqualified-id(类继承),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41081210/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com