我正在尝试创建一个将员工详细信息存储在数组中的c ++类,当添加新员工时,数组的大小会增加以适应新用户。我很确定代码应该可以工作,但是我不明白为什么我在第17行遇到这个错误,通常是因为我忘记了';'在某个地方,但我已经检查了6/7次,我找不到遗失;。
struct employee
{
int userID;
string name;
};
class userDB {
private:
employee *user;
int userSize;
public:
userDB(employee, employee)
:userSize(0)
{
userSize++;
user= new employee[userSize];
user[0]=employee;
};
~userDB()
{
delete[] user;
};
void showUserDB()
{
for(int i = 0;i<userSize;i++)
{
cout<<user[i].userID<<": "<<user[i].name<<endl;
}
};
void addNewUser(employee, employee)
{
int newUserDBSize=userSize+1;
employee* newUser=new employee[newUserDBSize];
for(int i=0;i<userSize;++i)
{
newUser[i]=user[i];
};
newUser[newUserDBSize-1]=employee;
delete[] userDB;
userDB = newUser;
userSize = newUserDBSize;
};
};
答案 0 :(得分:0)
此构造函数
userDB(employee, employee)
:userSize(0)
{
userSize++;
user= new employee[userSize];
user[0]=employee;
};
至少因为其参数未被使用而且在语句
中无效 user[0]=employee;
使用了类型名称employee
。也许你的意思是以下
userDB(employee employee)
:userSize(0)
{
userSize++;
user= new struct employee[userSize];
user[0]=employee;
};
虽然对象的名称与类型名称具有相同的名称是个坏主意。
函数addNewUser
的声明存在同样的问题 void addNewUser(employee, employee)
{
//...
也许你的意思是以下
void addNewUser(employee employee)
{
//...
在这种情况下,你必须使用一个名字。那不是例如
employee* newUser=new employee[newUserDBSize];
你必须写
struct employee* newUser=new struct employee[newUserDBSize];
因为参数的名称在函数声明中隐藏了类型的名称。
这些陈述
delete[] userDB;
userDB = newUser;
无效。您的数据成员user
不是userDB
。
如果重命名参数会好得多。:)
答案 1 :(得分:0)
添加功能中的以下行是错误的
delete[] userDB;
userDB = newUser;
我打赌你的意思
delete[] user;
user = newUser;