Constructor of class of an array

2019-07-26 09:57发布

问题:

i am getting error in this code

class business
{
    public:
        business();  // Default Constructor
        business(string busines,int r)
        {
            busines=busines;
            ratings=r;
        }   // constructor;

    private:

        string busines;
        int ratings;
        int items_owned;
        int business_cancellation;
        int biz_size_of_building;
        int biz_shipping_method;
};

int main(int argc, char *argv[])
{
    business b[10];

    b[b_count](busines,rating);

    return 0;
}

It gives me the following error (http://ideone.com/FfajNS):

prog.cpp: In function ‘int main(int, char**)’:
prog.cpp:32:32: error: no match for call to ‘(business) (std::string&, int&)’

回答1:

You're attempting to call a constructor on an already constructed object ... the default constructor was called during the array creation, therefore you cannot "construct" the object again. For your application, you may want to look into using a std::vector where you can create a array-like container using an object initialized from a set of default arguments.

For instance, you could do:

std::vector<business> array(10, business(business_string, rating));


回答2:

I believe you want something like this:

b[2] = business("Denny's", 50);

This creates a temporary business variable by calling the constructor with the given parameters. The temporary is then copied into slot 3 of the array b.



回答3:

The array b already created 10 business objects using the default constructor of that class. You can access those objects by business someBusiness = b[someIndex];

edit:

If you want to set the values of your individual objects, simply do this (notice, that you don't create these objects, just set their values):

for(int i=0; i<10; i++)
{
    b[i].busines = ...;
    b[i].ratings = ...;

    /* or to create new ones */

    b[i] = business("asd", 10);
}

It would be even better, if you stored these objects in vector, like Jason suggested



回答4:

   business b[10];

You create 10 "default" business object. What is b_count? I hope some int from 0 to 9. But here you are "calling" a business object with 2 arguments:

   b[b_count](busines,rating);

But business have no operator()() defined with 2 parametr.

EDIT: You definitely have to use std::vector and carefully read the other answers. But I know that on occasion beginners are not allowed to use the STL library, and anyway it seems that you should understand how constructors are used and how the elements of an array are initialized. Please read about static members and how they are defined and try to understand how the following example works.

#include <string>
using std::string;
class business
{
    public:
        business()                        // Default Constructor
            :busines(def_busines),ratings(def_ratings){}; 
        business(const string& bus,int r)   // constructor;
            :busines(bus),ratings(r){}

        static void SetDef(const string& busines,int r)
        {
            def_busines=busines;
            def_ratings=r;
        }

    private:

        string      busines;
        int         ratings;
        static string def_busines;
        static int def_ratings;
        int items_owned;
        int business_cancellation;
        int biz_size_of_building;
        int biz_shipping_method;

};
    string business::def_busines="";  // Set here the default-defaults
    int business::def_ratings=1;

int main(int argc, char *argv[])
{
    business::SetDef("Some business",2);
    business a[10];

    business::SetDef("Other business",3);
    business b[10];

    business c("Third business",4);


    return 0;
}