数组类的构造函数

时间:2013-03-14 17:45:41

标签: c++ arrays class constructor

我在此代码中收到错误

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

它给我以下错误(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&)’

4 个答案:

答案 0 :(得分:3)

您正在尝试在已构造的对象上调用构造函数...在创建数组期间调用了默认构造函数,因此您无法再“构造”该对象。对于您的应用程序,您可能需要考虑使用std::vector,您可以使用从一组默认参数初始化的对象创建类似数组的容器。

例如,你可以这样做:

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

答案 1 :(得分:1)

数组b已使用该类的default构造函数创建了10个业务对象。您可以通过business someBusiness = b[someIndex];

访问这些对象

修改

如果要设置单个对象的值,只需执行此操作(注意,您不创建这些对象,只需设置它们的值):

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

    /* or to create new ones */

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

如果你将这些对象存储在vector中,就像杰森所建议的那样

,那就更好了

答案 2 :(得分:1)

我相信你想要这样的东西:

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

这通过使用给定参数调用构造函数来创建临时业务变量。然后将临时值复制到数组b的插槽3中。

答案 3 :(得分:0)

   business b[10];

您创建10“默认”业务对象。什么是b_count?我希望0到9之间有一些int。 但是在这里你用一个参数“调用”一个业务对象:

   b[b_count](busines,rating);

但是商家没有使用2参数定义operator()()

编辑: 你必须使用std::vector并仔细阅读其他答案。 但我知道有时初学者不允许使用STL库,无论如何,你应该理解如何使用构造函数以及如何初始化数组元素。请阅读静态成员及其定义方式,并尝试了解以下示例的工作原理。

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