How to pass struct to a class in c++? -
i'm getting these results:
constructor setfunc setfunc
basically want class-object globally , pass struct array setmethod of class. , programme compiling not getting results.
datainput.h #ifndef datainput_h_ #define datainput_h_ #include <stdio.h> struct data{ const char *name; int salary; void set(int salary, const char *name){ printf("setfunc \n"); this->name = name; this->salary = salary; } };
this class in seprate cpp file above header file
class datainput { public: int datasize; struct info data[]; datainput(); virtual ~datainput(); void setdata(struct info d[], int numberofdata); void printdata(); private: }; #endif
-------eof---------- datainput.cpp
#include "datainput.h" datainput::datainput() { printf("constructor \n"); datasize = 0; } datainput::~datainput() { } void datainput :: setdata(struct info d[], int numberofdata){ datasize = numberofdata; (int = 0; i< numberofdata; i++){ printf("i-val in setdata() --> %d",i); this->data[i] = data[i]; } } void datainput::printdata(){ (int = 0; i< datasize; i++){ printf("name--> %s \n",data[i].name); printf("salary--> %d \n",data[i].salary); } }
--------eof----------- main.cpp
#include <stdlib.h> #include "datainput.h" #include <stdio.h> datainput *datainput; int main(void) { datainput in; datainput = ∈ struct info d[2]; d[0].set(1000, "abc"); d[1].set(2000, "xyz"); datainput->setdata(d, 2); //not setting info datainput->printdata(); //not printing homecoming 0; }
do memcpy of entire array, assigning info might lead memory leaks due stack frame removal or deletion. way lose logging simultaneously avoiding loop increasing performance
void datainput :: setdata(const struct info const* d, const int numberofdata) { // cleanup old data! if(this->data) delete [] this->data; if(!d) throw new std::invalid_argument("cannot set null data!"); // remove line if null may assigned , replace commented code. // if(!d) { // this->data = null; // this->datasize = 0; // } else { this->data = new data[(this->datasize = numberofdata)]; memcpy(this->data, d, sizeof(struct data) * numberofdata); // } }
don't forget update datainput class!
class datainput { public: int datasize; struct data* data; datainput(); virtual ~datainput(); void setdata(const struct info const* d, const int numberofdata); void printdata(); private: }; void datainput::printdata() { (int = 0; i< this->datasize; i++){ printf("name--> %s \n",this->data[i].name); printf("salary--> %d \n",this->data[i].salary); } } datainput::~datainput() { if(this->data) delete [] this->data; }
c++ class struct
No comments:
Post a Comment