1

我在这段代码中遇到错误

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

4 回答 4

3

您正在尝试在已构造的对象上调用构造函数……在数组创建期间调用了默认构造函数,因此您不能再次“构造”对象。对于您的应用程序,您可能希望考虑使用一个std::vector可以使用从一组默认参数初始化的对象创建类似数组的容器的位置。

例如,您可以这样做:

std::vector<business> array(10, business(business_string, rating));
于 2013-03-14T17:49:27.717 回答
1

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

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

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

于 2013-03-14T20:24:07.953 回答
1

该数组已经使用该类b的构造函数创建了 10 个业务对象。default您可以通过以下方式访问这些对象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如果您像 Jason 建议的那样将这些对象存储在 中,那就更好了

于 2013-03-14T17:52:55.497 回答
0
   business b[10];

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

   b[b_count](busines,rating);

但是业务没有operator()()用 2 个参数定义。

编辑:您绝对必须使用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;
}
于 2013-03-14T17:54:44.517 回答