Constructor of class of an array

余生颓废 提交于 2019-12-13 17:38:13

问题


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;
}


来源:https://stackoverflow.com/questions/15416527/constructor-of-class-of-an-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!