Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

Common Qt compile errors/hu: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
Egy rövid gyűjtemény azokról a fordítási/futtatási hibákról, amelyek kiskoromban sok bosszúságot és fejtörést okoztak nekem.<br />Vannak köztük banális problémák illetve olyanok is amiknek semmi köze Qt-hoz. Sok moc-al kapcsolatos problémát azóta a QtCreator azóta okosan megold magától.
Egy rövid gyűjtemény azokról a fordítási/futtatási hibákról, amelyek kiskoromban sok bosszúságot és fejtörést okoztak nekem.
Vannak köztük banális problémák illetve olyanok is amiknek semmi köze Qt-hoz. Sok moc-al kapcsolatos problémát azóta a QtCreator azóta okosan megold magától.


1. <code>expected initializer before 'class'<code>
1. <code>expected initializer before 'class'<code>
Line 23: Line 24:
6. </code>undefined reference to `vtable for classname`</code> olyan osztályban ami a QObjecttől származik.
6. </code>undefined reference to `vtable for classname`</code> olyan osztályban ami a QObjecttől származik.


Ugyebár ha az osztályainkban szignálokat, slotokat akarunk használni akkor a QObjecttől származtatjuk őket, és<br />az osztálydeklaráció elején megejtünk egy Q_OBJECT makrót. Ha ezt utólag tesszük meg valószínűleg nem fogja átzavarni a mocon.<br />Legegyszerűbb megoldás: make clean &amp;&amp; qmake &amp;&amp; make
Ugyebár ha az osztályainkban szignálokat, slotokat akarunk használni akkor a QObjecttől származtatjuk őket, és
az osztálydeklaráció elején megejtünk egy Q_OBJECT makrót. Ha ezt utólag tesszük meg valószínűleg nem fogja átzavarni a mocon.
Legegyszerűbb megoldás: make clean &amp;&amp; qmake &amp;&amp; make


7. <code>'classname' has not been declared<code> habár az &gt;osztályneve&amp;lt; osztályt már beincludoltad.<br />Ilyen akkor szokott leggyakrabban előfordulni, ha van a és b osztályod, és a tartalmaz b valamint b tartalmaz a típusú objektumokat.<br />Megoldás: az osztálydeklarációk (pl. a) előtt meg kell adni azt, hogy a hiányolt osztály létezik: (hint: foward declaration)<br /></code><br />class a;<br />class b<br />{<br /><br />private:<br />a m_object_a;<br />}<br /><code>
7. <code>'classname' has not been declared<code> habár az >osztályneve< osztályt már beincludoltad.
Ilyen akkor szokott leggyakrabban előfordulni, ha van a és b osztályod, és a tartalmaz b valamint b tartalmaz a típusú objektumokat.
Megoldás: az osztálydeklarációk (pl. a) előtt meg kell adni azt, hogy a hiányolt osztály létezik: (hint: foward declaration)
</code>
class a;
class b
{
private:
a m_object_a;
}
<code>


8. </code>Multiple types in one declaration</code> egy headerben több osztály definiálásakor.<br />Pontosvessző minden class deklaráció után.
8. </code>Multiple types in one declaration</code> egy headerben több osztály definiálásakor.
Pontosvessző minden class deklaráció után.


9. <code>Undefined reference to QObject::staticMetaCall()<code> mindez miután a Q_OBJECT makrót hozzáadtad.<br />Tehát van egy osztályod amit valamiből (jellemzően QMainWindow, vagy QDialog stb) örökölsz,<br />és egyéni slotokat/signalokat kívánsz hozzáadni.
9. <code>Undefined reference to QObject::staticMetaCall()<code> mindez miután a Q_OBJECT makrót hozzáadtad.
Tehát van egy osztályod amit valamiből (jellemzően QMainWindow, vagy QDialog stb) örökölsz,
és egyéni slotokat/signalokat kívánsz hozzáadni.


Megoldás: make clean, qmake, make<br />Régi QtCreator esetén a rebuild all nem elég kell egy qmake elé.<br />Ok: a fordító nem jön rá magától, hogy az adott fájlt át kell zavarni a mocon.
Megoldás: make clean, qmake, make
Régi QtCreator esetén a rebuild all nem elég kell egy qmake elé.
Ok: a fordító nem jön rá magától, hogy az adott fájlt át kell zavarni a mocon.


Mit is szoktak mondani az angolok ilyenkor: Feel free to extend it!
Mit is szoktak mondani az angolok ilyenkor: Feel free to extend it!

Revision as of 13:28, 25 February 2015

Egy rövid gyűjtemény azokról a fordítási/futtatási hibákról, amelyek kiskoromban sok bosszúságot és fejtörést okoztak nekem. Vannak köztük banális problémák illetve olyanok is amiknek semmi köze Qt-hoz. Sok moc-al kapcsolatos problémát azóta a QtCreator azóta okosan megold magától.

1.

expected initializer before 'class'<code>

Végignézni mindent, beszórni mindenhova a pontosvesszőt, az összes headerbe mindenhova.

2.

undefined reference to 'függvény neve'

A nevezett függvényt a headerben deklaráltad, de nem implementáltad.

3.

'classname' is not a namespace<code>

Nincs beincludolva az a header amiben az 'osztály' van.

4.

Invalid use of struct 'classname'

Ld. 3. pont

5.

undefined reference to 'slot neve'<code>

make clean qmake make vagy rebuild

6.

undefined reference to `vtable for classname` olyan osztályban ami a QObjecttől származik.

Ugyebár ha az osztályainkban szignálokat, slotokat akarunk használni akkor a QObjecttől származtatjuk őket, és az osztálydeklaráció elején megejtünk egy Q_OBJECT makrót. Ha ezt utólag tesszük meg valószínűleg nem fogja átzavarni a mocon. Legegyszerűbb megoldás: make clean && qmake && make

7.

'classname' has not been declared<code> habár az >osztályneve< osztályt már beincludoltad.
Ilyen akkor szokott leggyakrabban előfordulni, ha van a és b osztályod, és a tartalmaz b valamint b tartalmaz a típusú objektumokat.
Megoldás: az osztálydeklarációk (pl. a) előtt meg kell adni azt, hogy a hiányolt osztály létezik: (hint: foward declaration)

class a; class b { … private: a m_object_a; }

8.

Multiple types in one declaration egy headerben több osztály definiálásakor.

Pontosvessző minden class deklaráció után.

9. Undefined reference to QObject::staticMetaCall() mindez miután a Q_OBJECT makrót hozzáadtad. Tehát van egy osztályod amit valamiből (jellemzően QMainWindow, vagy QDialog stb) örökölsz, és egyéni slotokat/signalokat kívánsz hozzáadni.

Megoldás: make clean, qmake, make Régi QtCreator esetén a rebuild all nem elég kell egy qmake elé. Ok: a fordító nem jön rá magától, hogy az adott fájlt át kell zavarni a mocon.

Mit is szoktak mondani az angolok ilyenkor: Feel free to extend it!