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++ - vtable non definita
Forum - C/C++ - vtable non definita

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2313
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 20:13
Venerdì, 29/03/2024
Apro un topic magari qualcuno potrebbe darmi una mano.

Sto portando avanti il mio progettino,
Mi sono imbattuto alla fine nel dover per forza creare un editor di nodi.

è un pò una faticata ma sta uscendo bene.
il problema dove sta?

Gli elementi che ho creato sono tutti dinamici ed ovviamente hanno i loro comportamenti.
Qualsiasi oggetto presente.
Dal connettore, alla linea di collegamento ai vari output.

l'oggetto grafico lo inizializzo in questo modo

Codice sorgente - presumibilmente C/C++

  1. GraphItem *temp = new GraphItem(QPixmap(":/empty.png"));
  2.             temp->AddConnector(Connector::Output);
  3.             temp->AddConnector(Connector::Output);
  4.             temp->ApplyChanges();



Quello che sto tendando di fare ora, e quella di fare un override dell'oggetto grafico in modo da gestire il doppio click.
quindi

Codice sorgente - presumibilmente C#

  1. signals:
  2. void DBCLICK();
  3.  
  4.  
  5. protected:
  6.     void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override {
  7.         if (event->button() == Qt::LeftButton) {
  8.  
  9.            emit DBCLICK();  
  10.         }
  11.         QGraphicsObject::mouseDoubleClickEvent(event);
  12.     }




cosa succede ora?
Se provo a compilare in questo modo, non ho nessun errore.
Ma quando provo a connettere il segnale per poterlo gestire

Codice sorgente - presumibilmente C/C++

  1. connect(temp, &GraphItem::DBCLICK, this, [this](GraphItem *item) {
  2.  
  3. });



Ho un errore e mi dice di inseire alla classe del GraphItem  la riga Q_OBJECT per la metaprogrammazione.

Appena inserisco questa riga,

:-1: error: debug/scenegenerator.o:scenegenerator:(.rdata$.refptr._ZTV9GraphItem[.refptr._ZTV9GraphItem]+0x0): undefined reference to `vtable for GraphItem'

ho un errore sulla vtable come se il metodo virtuale non fosse presente.
consigli su come risolvere?


Thejuster ha allegato un file: Screenshot 2024-03-29 183946.png (483665 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da Thejuster il 29/03/2024 alle 20:15


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


Messaggi: 6407
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 8:35
Sabato, 30/03/2024
Hai provato a  pulire il progetto e ricompilare?

Clean Rebuild


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: 2313
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 9:06
Sabato, 30/03/2024
eh...
Grazie mille nessuno. mi prenderei a schiaffi.
Sono stato tutta la serata a capire quale era il problema.
Avevo pensato che magari dovevo fare una pulizia dei file generati, ma non pensavo che dipendesse realmente da quello.

ancora grazie mille nessuno.
ho poi ampliato la funzione

Codice sorgente - presumibilmente C/C++

  1. signals:
  2.     void dbclick(GraphItem *item);



inviando al segnale l'oggetto stesso in modo da poterlo gestire in seguito quando l'evento doppio click viene scatenato.
ero arrivato al punto nel pensare di scrivere una funzione di callback ma meglio così.
Ho evitato inutili sbattimenti di testa e il dubbio che nemmeno poteva funzionare.

Ultima modifica effettuata da Thejuster il 30/03/2024 alle 9:08


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