Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Assegnazione valore da una classe
Forum - C/C++ - Assegnazione valore da una classe

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2298
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:07
Mercoledì, 27/11/2019
Buongiorno.

Ho un problema nell'assegnare un valore da una classe.

in pratica, ClasseA chiama un metodo in ClasseB dove invia se stessa come argomento.
di seguito in classeA devo assegnare un valore nella classeB contenuta nell'argomento.

uso Qt.
Ho provato diverse soluzioni dichiarando direttamente nel file di intestazione NomeClasse *oggetto;
Ma ho errori sempre diversi tentando di risolvere il problema

la soluzione che ora sto tentando di completare è questa.

dichiaro nella classe CardItem

Anche se è sbagliato, è ciò che vorrei fare
magari mostrando cosa voglio fare da codice (anche sbagliato) si capisce meglio.


Classe MainWindow
Codice sorgente - presumibilmente VB.NET

  1. //MainWindow.h
  2.  
  3. public:
  4. int numero = 0;
  5.  
  6.  
  7.  
  8. //MainWindow.cpp
  9.  
  10. void MainWindow::Test()
  11. {
  12.  
  13.     CardItem *item = new CardItem;
  14.  
  15.    item->prova(this); //error: no matching function for call to 'CardItem::Prova(MainWindow* const)'
  16. }





Codice sorgente - presumibilmente C/C++

  1. //CardItem.h
  2.  
  3. #include "mainwindow.h"
  4.  
  5. public:
  6.  
  7. void Prova(MainWindow *parent);  //error: 'MainWindow' has not been declared
  8.  
  9.  
  10.  
  11. //CardItem.cpp
  12.  
  13.  
  14. void CardItem::Prova(MainWindow *parent)
  15. {
  16.  
  17.     parent->numero = 5;
  18. }




Come posso risolvere?

Mi serve inviare a quella classe da un void il MainWindow stesso per poter modificare alcuni parametri.

Se provo a fare nella classe CardItem

MainWindow *t = new MainWindow;

mi dice is not a name type.

ho tentato anche con un cast di conversione ma ho lo stesso errore
consigli?

Ultima modifica effettuata da Thejuster il 27/11/2019 alle 12:11


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6383
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:51
Mercoledì, 27/11/2019
Ma la classe MainWindow dove è definita?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2298
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 15:09
Mercoledì, 27/11/2019
Di default è già definita quando viene creato un nuovo progetto.
Tipo come quando in .net crei una nuova applicazione WinForm. lo stesso fà il Qt
Genera già una MainWindow principale.

Stranamente non riesco ad avere accesso in nessun modo a quella classe.

Viene di default dichiarata nel file main.cpp

Codice sorgente - presumibilmente C++

  1. #include "mainwindow.h"
  2. #include <QApplication>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     QApplication a(argc, argv);
  7.     MainWindow w;
  8.     w.show();
  9.    
  10.     return a.exec();
  11. }



Nel caso vuoi vedere meglio ecco

Errore 1  ( MainWindow.cpp )
https://i.ibb.co/yg5sYx7/err1.png

Errore 2  ( CardItem.h )
https://i.ibb.co/tsrP4VY/err2.png



Ultima modifica effettuata da Thejuster il 27/11/2019 alle 15:20


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2298
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 17:15
Mercoledì, 27/11/2019
Risolto diversamente.

Dopo essermi documentato che non è possibile risalire al Form Principale perché considerato come
Ciclo di dipendenza mi sono escogitato questo altro metodo.

ovvero dichiarare al Form principale un array di tutti gli oggetti CardItem *  così da passare alla classe l'indirizzo del puntatore e manovrare il valore quando l'elemento viene azionato.

al check eseguo

Codice sorgente - presumibilmente C/C++

  1. foreach (QGraphicsItem *item, s->items())
  2.     {
  3.         CardItem *it = qgraphicsitem_cast<CardItem *>(item);
  4.         if(!it)
  5.             continue;
  6.  
  7.         if(it->selected)
  8.         QMessageBox::information(this,"Test",QString::number(it->Numero),QMessageBox::Ok);
  9.     }




https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote