gpt4 book ai didi

c++ - 对象指针参数不能使用与对象相同的类中的访问器方法

转载 作者:行者123 更新时间:2023-11-27 23:26:25 25 4
gpt4 key购买 nike

所以我有这个:

class A
{
private:
unsigned int _uid; //user identifier
public:
A();
A(const char *, const char *, int, int, const char *, const char *, const char *);
virtual ~A();
int getUserID();
};

int A::getUserID(){
return _uid;
}

//The class UserDB is not that important as this method is at this moment.
void UserDB::adduser(A* newUser){
if(newUser.getUserID == 0) //Not working, not sure why... Gives syntax error. (1)
//Something is done if the condition is true;
};

int main(){
UserDB B
A tempObj;
//Assume the 7 following variables have been initialized correctly.
char uloginName[9];
char homeDirectory[33];
int userID;
int groupID;
char password[17];
char shell[17];
char gecos[65];
tempObj = new A(uloginName, password, userID, groupID, gecos, homeDirectory, shell);
B = new UserDB();
B.addUser(tempObj);
}

所以不知何故我无法获得参数指针以使用访问器方法(请参阅标记为 (1) 的行)。有人可以给我一个快速修复吗?我搜索了一种方法来做到这一点,但似乎没有人拥有将参数作为对象指针的访问器。

最佳答案

这里有很多问题。让我尝试为您解决其中的一些问题。

您声明:

     unsigned int _uid; //user identifier

但是你的 getter 是:

    int getUserID();

这有截断的风险。应该是:

    unsigned int getUserID() const;

const 因为您没有修改 class 的实例。

这将被定义为:

unsigned int A::getUserID() const
{
return _uid;
}

接下来,幻影的这个方法:

void UserDB::adduser(A* newUser)

你说:

I searched a for a way to do it but no one seems to have accessors with parameters being pointers to an object.

那是因为在这样的中不需要这个。您应该更愿意在此处通过引用传递。 const-reference 会更好,但我们不要改变太多...

void UserDB::adduser(A& newUser)
{
if (newUser.getUserID() == 0)
{
//Something is done if the condition is true;
}
};

那里没有语法错误!对于指针,首先您需要检查它不是 NULL,然后使用 -> 运算符而不是 .。引用更清晰。

然后,继续……

int main(){

A tempObj;

这会在堆栈上构造 A 的实例,调用默认构造函数。您不需要它,所以只需将其删除即可。

    UserDB B;

这会在堆栈上构造一个 B,再次调用默认构造函数。我打算不管它了。

    //Assume the 7 following variables have been initialized correctly.

好的。就这一次。

    tempObj = new A(uloginName, password, userID, groupID, gecos, homeDirectory, shell);

你不能那样做! tempObj 是一个 A,而不是一个 A*。相反,只需在调用第二个构造函数的堆栈上创建一个 A:

    A tempObj(uloginName, password, userID, groupID, gecos, homeDirectory, shell);

现在开始......

    B = new UserDB();

同样,您不能这样做。 B 是一个 UserDB,而不是 UserDB*。只需删除这一行,不需要它,因为您已经在堆栈中创建了一个!

这条线几乎是对的...

    B.addUser(tempObj);

...但是 C++ 是区分大小写的!使用:

    B.adduser(tempObj);

你的代码应该可以编译。

read a book or two 的时间!

关于c++ - 对象指针参数不能使用与对象相同的类中的访问器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9116480/

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