How Can i get array in another class
-
// classeA.h std::array<QString,25> Inputs; // ClassA.cpp "UploadCSV" void UploadCSV::on_parambtn_2_clicked() { int compteur=0; QString cell0; QString cell3 ; for(int i=0;i<ui->tablewidget->rowCount();i++){ QTableWidgetItem *cell7 = ui->tablewidget->item(i,7); QVariant myData7 = cell7->data(Qt::DisplayRole); if (myData7=="Core_meas"){ cell0 = ui->tablewidget->item(i,0)->text(); cell3 = ui->tablewidget->item(i,3)->text(); Inputs[compteur]=cell3; qDebug() << "Inputs baby"<<Inputs[compteur] ; compteur++; } } }
//in classB.
UploadCSV *up;
//in classB.cpp
up=new UploadCSV(); for(size_t i=0;i<up.Inputs->size();i++){ qqDebug() << "this is data",up.Inputs[i]
-
@jsulm sorry I edited the code .
I gave the expamle of classA and ClassB to be clearer .
ClassA (UploadCSV ) is a Qwidget : Qdialog
ClassB (Backend) is QObject .
@dziko147 Is this your real code:
up=new UploadCSV(); for(size_t i=0;i<up.Inputs->size();i++){ qqDebug() << "this is data",up.Inputs[i]
?
Because Items is filled when UploadCSV::on_parambtn_2_clicked() is called (at least according to code you posted). But you're printing Inputs just after creating UploadCSV instance (up)! So why should there be anything in Inputs? -
@CP71 it's called in UploadCSV class (classA) .
and inside this function I set data in Inputs[] .
@dziko147 said in How Can i get array in another class:
it's called in UploadCSV class (classA) .
Where exactly?! And what is classA?! This all is really confusing!
up != classA -
@dziko147 Is this your real code:
up=new UploadCSV(); for(size_t i=0;i<up.Inputs->size();i++){ qqDebug() << "this is data",up.Inputs[i]
?
Because Items is filled when UploadCSV::on_parambtn_2_clicked() is called (at least according to code you posted). But you're printing Inputs just after creating UploadCSV instance (up)! So why should there be anything in Inputs? -
@dziko147 said in How Can i get array in another class:
@jsulm yes i understand you . So can you suggest a way to do this correctly ?
Something like it was explained in your other thread ?
-
@dziko147 said in How Can i get array in another class:
it's called in UploadCSV class (classA) .
Where exactly?! And what is classA?! This all is really confusing!
up != classA -
@jsulm forget classA and classB example .
So curretly we have UploadCSV class and BackendClass .
I would like to get array defined from UploadCSV in Backend class .@dziko147 said in How Can i get array in another class:
I would like to get array defined from UploadCSV in Backend class
Then do so.
To get it you need the UploadCSV instance. How you get it in Backend I don't know as I don't have your code. There are different ways to do this. You can pass pointer to UploadCSV instance to Backend constructor for example.
But to be able to give a good advice we would need to know how you manage your UploadCSV and Backend instances. -
@jsulm
currently I pass a pointer like this .
in backend.hUploadCSV *up;
in backend.cpp
up = new UploadCSV();
-
@jsulm
currently I pass a pointer like this .
in backend.hUploadCSV *up;
in backend.cpp
up = new UploadCSV();
@dziko147
Sorry, but my English is no good.
So maybe I can help you with an example.To link my example.
I think you are filling your array in obj1, but when you try to read it you use obj2.
You that know your project, have a sense what I write?In short, these are possible ways to have your result:
- two or more instance of you class
- your object never fills the array
- your object fills the array but with an empty value
- in somewhere of your class clear your array before you use it
But in your case seems you have two instances of class
-
@jsulm forget classA and classB example .
So curretly we have UploadCSV class and BackendClass .
I would like to get array defined from UploadCSV in Backend class .Now that I understand a bit more, I think the only issue here is that you dont click that button that will fill your array before you try to access the elements.
You fill your array here:
void UploadCSV::on_parambtn_2_clicked() { .... if (myData7=="Core_meas"){ cell0 = ui->tablewidget->item(i,0)->text(); cell3 = ui->tablewidget->item(i,3)->text(); Inputs[compteur]=cell3; // <---- HERE qDebug() << "Inputs baby"<<Inputs[compteur] ; compteur++; } .... }
That means the array is still empty right after creating the class instance.
up=new UploadCSV(); // <--- New, empty public array for(size_t i=0;i<up.Inputs->size();i++){ qDebug() << "this is data",up.Inputs[i] // data access, but not clicked that button before
Also, you need to have access to the "same" instance where your array is filled with data. (See @CP71 and @jsulm answers). This could be done by passing a pointer to that object with contains your data.
-
@jsulm
currently I pass a pointer like this .
in backend.hUploadCSV *up;
in backend.cpp
up = new UploadCSV();
@dziko147 said in How Can i get array in another class:
currently I pass a pointer like this
No, you do not pass any pointers here.
What I mean is:up = new UploadCSV(); Backend backend(up); // Here you pass pointer to up to Backend instance
Of course you need to change the Backend constructor and store the pointer in Backend as member variable to be able to use it later.