为什么我会收到错误“在'之前的'期望的primary-expression';'令牌“在我班上

时间:2015-03-06 11:55:17

标签: c++ class token

我正在尝试创建一个将员工详细信息存储在数组中的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;
    };
};

2 个答案:

答案 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;