数组类的构造函数

Constructor of class of an array

本文关键字:构造函数 数组      更新时间:2023-10-16

我在此代码中遇到错误

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&)’

您正在尝试在已构造的对象上调用构造函数...默认构造函数是在数组创建期间调用的,因此您无法再次"构造"对象。 对于您的应用程序,您可能需要研究使用一种std::vector,您可以在其中使用从一组默认参数初始化的对象创建类似数组的容器。

例如,您可以执行以下操作:

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

你想要这样的东西:

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

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

数组

已经使用该类的default构造函数b创建了 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中,那就更好

   business b[10];

创建 10 个"默认"业务对象。什么是b_count?我希望从 0 到 9 有一些 int。但是在这里,您正在使用 2 个参数"调用"业务对象:

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