gpt4 book ai didi

C++难以将对象添加到数组

转载 作者:行者123 更新时间:2023-11-30 02:41:20 27 4
gpt4 key购买 nike

我的目标是编写一个函数,将 AccountInfo 类的对象添加到包含 200 个元素的 AccountInfo 对象数组中。该数组开始时没有任何对象。 AccountInfo 类包含几个字段 - 大部分是 char*,还有一些 int。

经过几个小时的尝试,我无法弄清楚出了什么问题。我的代码都符合,但我得到一个异常

Project1.exe 中 0x00A164B0 处的第一次机会异常:0xC0000005:访问冲突写入位置 0x00000000。

在下面一行:

getAccounts()[size()] = AccountInfo(*newUser);

我在保留基本信息的同时尽可能地简化了我的代码。如果提供 AccountInfo 类的代码会有帮助,我也可以这样做。

#include <iostream>
using namespace std;

class AccountInfo
{
private:
char* _userLoginName;
char* _password;
unsigned int _uid;
unsigned int _gid;
char* _gecos;
char* _home;
char* _shell;

public:
//Constructor and Destructor
AccountInfo(char* username);
~AccountInfo();

//Also contains getters and setters.
};

//Method Definitions

AccountInfo::AccountInfo(char* username)
{
//Initialize the username and other mandatory fields.
_userLoginName = username;
_home = "/", "h", "o", "m", "e", "/", username;
_shell = "/bin/bash";
}

AccountInfo::~AccountInfo()
{
//Delete dynamically created fields.
delete _userLoginName;
delete _password;
delete _gecos;
delete _home;
delete _shell;
}

class UserDB
{
private:
AccountInfo* _accounts[200];
unsigned int _size;
unsigned int _nextUid;
unsigned int _defaultGid;

AccountInfo* getAccounts();

public:
UserDB();
~UserDB();

void adduser(AccountInfo* newUser);

int size(); // return the number of accounts stored (_size)
};

AccountInfo* UserDB::getAccounts()
{
return _accounts[200];
}

UserDB::UserDB()
{
_size = 0;
_nextUid = 1001;
_defaultGid = 1001;
}

int UserDB::size()
{
return _size;
}

void UserDB::adduser(AccountInfo* newUser)
{
getAccounts()[size()] = AccountInfo(*newUser);
}

int main() //main method
{
UserDB users;
AccountInfo *x = new AccountInfo("Joe");
//This creates an AccountInfo object with one of its
//char* fields initialized to "Joe".
users.adduser(x);

return 0;
}

我做错了什么?我该如何解决?

最佳答案

您正在创建一个新的临时对象以添加指向:

getAccounts()[size()] = AccountInfo(*newUser);

为什么取消引用 newUser,只是为了复制构造一个临时的?

你可能想要:

getAccounts()[size()] = newUser;

此外,size 不是该函数的好名称 - 它听起来好像您每次都在索引 N+1 位置。 numAccounts 或类似的可能更合适。

不要忘记增加这个计数器,并检查您是否达到了 200 限制!

此外,通过您添加的代码,我发现您尝试将类型为 char* 的变量设置为 "something"。您只能在初始化时执行此操作;您的构造函数需要以这种方式在初始化列表中设置 _shell 等,而不是在构造函数主体中:

AccountInfo::AccountInfo(char* newUser) : _shell("/bin/bash") {/**/}

关于C++难以将对象添加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28206197/

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