Constructor de clase de una matriz.

Estoy recibiendo un error en este código

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

Me da el siguiente 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&)' 

Está intentando llamar a un constructor en un objeto ya construido … se llamó al constructor predeterminado durante la creación de la matriz, por lo tanto, no puede “construir” el objeto nuevamente. Para su aplicación, es posible que desee considerar el uso de un std::vector donde puede crear un contenedor similar a una matriz utilizando un objeto inicializado a partir de un conjunto de argumentos predeterminados.

Por ejemplo, podrías hacer:

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

Creo que quieres algo como esto:

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

Esto crea una variable de negocio temporal llamando al constructor con los parámetros dados. El temporal luego se copia en la ranura 3 de la matriz b .

La matriz b ya creó 10 objetos comerciales utilizando el constructor default de esa clase. Puede acceder a esos objetos por business someBusiness = b[someIndex];

editar:

Si desea establecer los valores de sus objetos individuales, simplemente haga esto (observe que no crea estos objetos, simplemente establezca sus valores):

 for(int i=0; i<10; i++) { b[i].busines = ...; b[i].ratings = ...; /* or to create new ones */ b[i] = business("asd", 10); } 

Sería aún mejor si almacenara estos objetos en un vector , como sugirió Jason.

  business b[10]; 

Se crean 10 objetos de negocio “predeterminados”. ¿Qué es b_count? Espero un poco de int de 0 a 9. Pero aquí está “llamando” a un objeto de negocio con 2 argumentos:

  b[b_count](busines,rating); 

Pero las empresas no tienen operator()() definido con 2 parámetros.

EDITAR: Definitivamente tienes que usar std::vector y leer cuidadosamente las otras respuestas. Pero sé que en ocasiones a los principiantes no se les permite usar la biblioteca STL, y de todos modos parece que debes entender cómo se usan los constructores y cómo se inicializan los elementos de una matriz. Lea acerca de los miembros estáticos y cómo se definen y trate de entender cómo funciona el siguiente ejemplo.

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