期望表达式Array of Object

时间:2014-12-09 13:37:24

标签: c++ arrays class pointers visual-c++

我该如何解决这个错误?

className需要2个参数{string,int}

className *Object; 

Object= new className[2]; 



Object[1]= { name, id};  // ERROR 

1 个答案:

答案 0 :(得分:0)

首先,您需要了解代码的作用:

int main()
{
    className *object;              // Create a pointer to className type.
    object = new className[2];      // Create an array of two className objects.
                                    // note here you are instantiating className.
                                    // This is possible because it have a default constructor.

    object[1] = { "John Doe", 1 };  // Here you're assigning new values to a existing object trough 
                                    // the assignment operator(=). As you're working with visual-c++
                                    // the compiler by default will generate the operator=() function, but 
                                    // if all conditions are not there the compiler can't generate it.
                                    // You need to add to className another constructor.

    cout << object[1].get_name() << endl;
}

以下课程将有效:

class className
{
public:
    className(string pname, int pid) :name(pname), id(pid){}  // New constructor.
    className(){}
    string get_name(){ return name; }
    int get_id(){ return id; }
private:
    int id;
    string name;
};

另一方面......

您正在使用c ++,使用

您的主要功能可以写成如下:

int main()
{
    vector<className> objects;              // A vector of className objects.
    objects.push_back({ "John Doe", 1 });   // Add an object to vector.
    objects.push_back({ "John Mark", 2 });  // Add another object to vector.

    cout <<  objects[0].get_name() << endl;  // Access to an object in vector.

    return 0;
}

如果您使用vector,那么您不必担心释放已使用new分配的内存。