首页 > 解决方案 > c++派生类对象没有成员,为什么?

问题描述

我的作业中有这个问题。

我有这两个课程:

-一个用户类:

   class user
{
protected:
int id;
std::string password;
std::string name;
bool online;
static int usersCounter;
static int onlineCounter;

public:
user(std::string = "user", std::string = "1234");

bool connect(std::string);
void disconnect();
void changePassword(std::string);
void changeName(std::string);
virtual void printInfo();

static int getOnlineNo() 
{
    return onlineCounter;
}

static int getTotalUsers() 
{
    return usersCounter;
}

friend class admin;
};

和一个管理员类:

class admin : public user
{
public:
admin(std::string name = "admin", std::string password = "admin"):
    user(name, password){}

void disconnectUser(user&);
void viewUsers( user** );
void printInfo() override;
};

当我尝试创建一个多态对象并从 admin 调用一个函数(一个特定于 admin 的函数,如 disconnectUser(...) 或 viewUsers(...))时,我收到错误,因为“类“用户”没有成员“viewUsers ”。

user* usr = new admin();
usr->viewUsers(&usr);//error

这是常见的事情,我做了一个错误的设计,还是它应该工作,我做错了什么?

标签: c++

解决方案


正如评论中所指出的,如果您定义一个类型的类,A您只能访问该类的公共方法和属性。

在您的情况下,viewUsers仅在admin您使用泛型user类时出现在类中。

您必须非常小心地使用继承,因为很容易在类中放置错误的方法或进行错误的继承。例如,您确定方法viewUsers必须在admin类中吗?通常,如果一个函数不依赖于类,最好把它放在类之外。


推荐阅读