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
Post a Comment