g++ - Why can't I make objects in C++ have data-members that are other objects? -


i bored 1 day, made library:

template <class x, class y> class hash { public: hash(x element, y key) {     elements=new x[0];     keys=new y[0];     keys[0]=key;     elements[0]=element;     num_elements=0; }; ~hash () {     delete[] elements;     delete[] keys; }; void add(x element, y key) {     (int x=0; x<=num_elements; x++)     {         if (keys[x]==key)         {             throw(key);         }     }     //make copy variables     x *copy_elements=new x[num_elements];     y *copy_keys=new y[num_elements];     //copy elements     (int x=0; x<=num_elements; x++)     {         copy_elements[x]=elements[x];         copy_keys[x]=keys[x];     }     //delete originals     delete[] elements;     delete[] keys;     //resize originals     elements=new x[num_elements+1];     keys=new y[num_elements+1];     //copy originals     (int x=0; x<=num_elements; x++)     {         elements[x]=copy_elements[x];         keys[x]=copy_keys[x];     }     //delete copies     delete[] copy_keys;     delete[] copy_elements;     //increment num_elements     num_elements++;     //add new elements     elements[num_elements]=element;     keys[num_elements]=key; }; x operator [] (y key) {     int num=0;     (int x=0; x<=num_elements; x++)     {         if (keys[x]==key)         {             num=x;             break;         }     }     return elements[num]; }; y keynum(int x) {     return keys[x]; }; int numelements() {     return num_elements; }; private: int num_elements; x *elements; y *keys; }; 

and tested it, , worked. trying create experiment source code this:

#include <hash.cpp> #include <iostream> using namespace std;  class object  {     public:         object(string name, int number)         {             int_properties=new hash <string, int>;         };         ~object()         {             delete int_properties;         };         hash <string, int> *int_properties; };  int main() {     object a("name", 5);     return 0; } 

and returning error:

 brain.cpp: in constructor ‘object::object(std::string, int)’: brain.cpp:10: error: no matching function call ‘hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>::hash()’ /usr/include/hash.cpp:4: note: candidates are: hash<x, y>::hash(x, y) [with x = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, y = int] /usr/include/hash.cpp:2: note:                 hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>::hash(const hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int>&) 

i have made whole lot of tests, , no matter do, can't seem initialize object data-member of object. don't understand why.

you declare constructor takes parameters hash<x, y>:

hash(x element, y key) {     elements=new x[0];     keys=new y[0];     keys[0]=key;     elements[0]=element;     num_elements=0; }; 

and try allocate hash<string, int> in object::object:

object(string name, int number)   {       int_properties=new hash <string, int>;   };   

you need pass name , number hash<string, int>'s constructor:

    int_properties=new hash <string, int>(name, number); 

Comments

Popular posts from this blog

Add email recipient to all new Trac tickets -

400 Bad Request on Apache/PHP AddHandler wrapper -

php - Change action and image src url's with jQuery -