i define an object from class base & call dosomthing & get gollowing error: request for member ‘dosomthing’ in ‘base’, which is of non-class type ‘Base*’ On Tue, 2009-10-27 at 11:13 +0100, Axel Freyn wrote: > Hi Mohsen > On Wed, Oct 28, 2009 at 12:46:56AM +0330, Mohsen Pahlevanzadeh wrote: > > Dear Axel, > > given code doesn't work. > I tried it now - it compiles and runs fine for me with gcc-4.4.1. > What errors do you obtain? > > Axel > > On Mon, 2009-10-26 at 17:32 +0100, Axel Freyn wrote: > > > Hi Mohsen, > > > On Tue, Oct 27, 2009 at 07:40:45AM +0330, Mohsen Pahlevanzadeh wrote: > > > > Suppose following code: > > > > //////////// > > > > char *var; > > > > var = "class1" > > > > //////////// > > > > So, I don't know name of class1, but i have varibale var.How can i > > > > create an object from class1 by this variavble? > > > Sorry, now I understand the question:-) > > > Well - I think the best way is the one proposed by Andrew: You first > > > have to some kind of dictionary, which maps the names to the classes - > > > this dictionary can't be created automatically in C++, but you have to > > > write it yourself. And in addition, you have to supply a common > > > base-class for all your classes. The following example (untested...) > > > should explain the procedure: > > > > > > #include <iostream> > > > #include <cstring> > > > #include <cstdlib> > > > class Base{ > > > public: > > > virtual void DoSomething() = 0; > > > }; > > > class A:public Base{ > > > public: > > > void DoSomething(){std::cout << "A" << std::endl;} > > > }; > > > class B:public Base{ > > > public: > > > void DoSomething(){std::cout << "B" << std::endl;} > > > }; > > > Base *Create(const char *name){ > > > if (strcmp(name, "A")==0) > > > return new A; > > > if (strcmp(name, "B")==0) > > > return new B; > > > exit(1); > > > } > > > int main(){ > > > Base *base; > > > base = Create("A"); > > > base->DoSomething(); > > > delete base; > > > base = Create("B"); > > > base->DoSomething(); > > > delete base; > > > } > > > > > > Axel > > > > > > > > > > > > > > > On Mon, 2009-10-26 at 10:55 +0100, Axel Freyn wrote: > > > > > Hi, > > > > > On Tue, Oct 27, 2009 at 12:31:05AM +0330, Mohsen Pahlevanzadeh wrote: > > > > > > Oh, I forgot that i say i need to variable name of objects.same classes. > > > > > > Therefor i need to variable name of objects & variable name of classes. > > > > > > On Mon, 2009-10-26 at 23:42 +0330, Mohsen Pahlevanzadeh wrote: > > > > > > > Dear all, > > > > > > > We know that we can create an object with following code: > > > > > > > ///////////////////////////////////////////////// > > > > > > > class_name *object_name = new() class_name; > > > > > > > /////////////////////////////////////////////// > > > > > > > So, i have a class pool,I wanna create Object with a variable name that > > > > > > > variable is my class.Same: > > > > > > > var *obj = new() var; > > > > > > > var is a variable that contains a my class's name. > > > > > > > How can i implement it? > > > > > Well, I'm not sure I understand correctly, but I think the solution is > > > > > derivation: > > > > > class Base{}; > > > > > class A:public Base{}; > > > > > class B:public Base{}; > > > > > ... > > > > > > > > > > > > > > > Then you can do: > > > > > Base *var; > > > > > var = new A; > > > > > delete var; > > > > > var = new B; > > > > > delete B; > > > > > > > > > > All functions, which you want to call by accessing "var" (e.g. > > > > > var->Function()) have to be defined as virtual function in class Base. > > > > > > > > > > Does that solve your problem? > > > > > > > > > > Axel > > > > > >