У вас есть ряд вопросов здесь. Позвольте мне обратиться к некоторым из них для вас.
Вы заявляете:
unsigned int _uid; //user identifier
Но ваш добытчик для этого:
int getUserID();
Это рискует усечением. Должно быть:
unsigned int getUserID() const;
const
потому что вы не изменяете экземпляр class
.
Это будет определено:
unsigned int A::getUserID() const
{
return _uid;
}
Далее этот метод фантома class
:
void UserDB::adduser(A* newUser)
Вы сказали:
Я искал способ сделать это, но, похоже, ни у кого нет средств доступа с параметрами, указывающими на объект.
Это потому, что в таком class
нет необходимости. Вы должны предпочесть пройти по ссылке здесь. const
- ссылка была бы лучше, но давайте не будем слишком сильно менять ...
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);
И ваш код должен скомпилироваться.
Время прочитать книгу или две !