【问题标题】:Constructor of class of an array数组类的构造函数
【发布时间】:2013-03-03 05:31:36
【问题描述】:

这段代码出错了

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

【问题讨论】:

  • 在没有定义默认构造函数的情况下不能创建数组。此外,当您定义数组时,会创建所有对象;所以你不会再次调用构造函数。

标签: c++ arrays class constructor


【解决方案1】:

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

例如,你可以这样做:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      数组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);
      }
      

      如果你像 Jason 建议的那样将这些对象存储在 vector 中会更好

      【讨论】:

      • 实际上我必须设置变量,例如用户将进入业务并评分十次,然后这些变量将相应地设置,这有意义吗?
      【解决方案4】:
         business b[10];
      

      您创建 10 个“默认”业务对象。 b_count 是什么?我希望有一些从 0 到 9 的整数。 但是在这里,您正在“调用”具有 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;
      }
      

      【讨论】:

      • 我定义了一个构造函数业务(字符串业务,int rating),所以应该调用这个构造函数。但我不知道为什么它在数组的情况下不调用。
      • @mun。希望编辑对您有所帮助。
      猜你喜欢
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 2012-09-22
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      相关资源
      最近更新 更多