"undefined reference to" error, pointer vraag en #if, #ifndef en #endif vraag

Status
Niet open voor verdere reacties.
1) ik weet niet of de melding hier door komt, maar in cmsn.h heb je de overerverving toegevoegd, maar in cmsn.cpp nog niet.

1) Hoe moet ik overerving in cmsn.cpp doen? : public QObject in de class definitie is toch genoeg?

3) 4) In mijn voorbeeld zou je ene inderdaad weg kunnen laten, maar het wordt lastiger als je gebruik maakt van libraries die geen #define e.d. gebruiken.

Een Qt voorbeeld: stel dat je een in een programma een QDateEdit en een QTimeEdit wil gebruiken. Hiervoor voeg je netjes "#include <QDateEdit>" en "#include <QTimeEdit>" toe. Dit vormt echter al een probleem aangezien beide klassen zijn afgeleid van QObject. Je include dus netjes de beide klassen, maar ondertussen ook 2x QObject. Doordat Qt #define e.d. gebruikt wordt voorkomen dat je "Class redefinition errors" krijgt.

2) Dit snap ik (eindelijk). Maar dit nog niet: Waarom werkt die 2e header (QTimeEdit) dan toch nog? Die vraagt QObject, maar QObject is (in dat geval) een leeg bestand. Waarom geeft QTimeEdit dan toch geen errors dat de klasse QObject niet bestaat (want die erft hem over)?
 
1) Ik wil het niet te makkelijk maken, maar met iets als dit zou je een heel einde moeten kunnen komen:
Code:
cmsn::cmsn() : QObject() // weet niet zeker of de haken nodig zijn..
2) Bij een include gaat het erom dat de klasse bekend is, zodat er mee gewerkt kan worden. Dat de include bij een 2e keer in feite leeg is maakt dan niet meer uit, omdat de klasse toch al is gedefinieerd.
 
Laatst bewerkt:
1) Zonder haken een error dat ze er moeten. Met haken geeft dit geen verschil met de vorige error, nog steeds dezelfde.

2) Ik snap het geloof ik.
 
Ik snap eigenlijk niet wat die MOC doet. Iets met SIGNALS en SLOTS heb ik verstaan, maar wat snap ik niet echt. Kan je ff uitleggen aub? En waarvoor zou het nuttig zijn? Ik heb toch al SIGNALS en SLOTS in andere classes en die werken daar wel zonder dat moc file in m'n code op te nemen.
 
De moc zet de signals en slots van Qt om naar C++ code waarmee de compiler overweg kan. Dit zou je voor zover ik weet wel toe moeten voegen om de signals en slots te laten werken.

Hier wordt het een en ander uitgelegd onder andere over signals en slots en de moc: link

Ik heb toch al SIGNALS en SLOTS in andere classes en die werken daar wel zonder dat moc file in m'n code op te nemen
Weet je zeker dat ze werken of geeft de compiler er alleen geen fouten over?
 
De moc zet de signals en slots van Qt om naar C++ code waarmee de compiler overweg kan. Dit zou je voor zover ik weet wel toe moeten voegen om de signals en slots te laten werken.

Hier wordt het een en ander uitgelegd onder andere over signals en slots en de moc: link


Weet je zeker dat ze werken of geeft de compiler er alleen geen fouten over?

Ik heb nog een programaatje gemaakt waar ze werken zonder fouten zonder de moc files toe te voegen. Ik wil het gerust een proberen met .moc file, alleen, waar haal ik het vandaan? Hoe heet het?
 
moc files moeten worden gegenereerd op basis van je header files, dit kan met bijv qmake. als je qmake al gebruikt dan gebeurt het misschien al wel automatisch. Om meer te weten te komen over moc files kun je het beste even googlen, want moc files ben ik ook niet helemaal van op de hoogte.

Overigens: het ontbreken van moc files kan zorgen voor vtable errors.
 
moc files moeten worden gegenereerd op basis van je header files, dit kan met bijv qmake. als je qmake al gebruikt dan gebeurt het misschien al wel automatisch. Om meer te weten te komen over moc files kun je het beste even googlen, want moc files ben ik ook niet helemaal van op de hoogte.

Overigens: het ontbreken van moc files kan zorgen voor vtable errors.

Het werkt :). Ik gebruikte KDevelop waarbij automatisch mijn bestanden worden gecompiled. Ik heb het nu handmatig gedaan:

# qmake
# make

En dan werkte het. moc files heb ik dus blijkbaar niet nodig (vraag me af of ik ze ooit wel nodig zal hebben).

Nu heb ik nog deze vraag:

- Ik zie soms dat men "emit" gebruikt. Ik las dat het ongeveer zo werkt:

connect(ding, SIGNAL(functie1(),ding2,SLOT(functie2)))

En in functie1 of functie2 staat er dan emit. En ik las ook dat het ergens ervoor zorgde dat SIGNAL of SLOT instructies krijgen, maar ik snap eigenlijk nog niet echt wat het nu doet.
 
Met "emit" kun je aangeven wanneer een (eigen gemaakte) signal geactiveerd moet worden. Dus in zekere zin je signal instructies geven.
 
Met "emit" kun je aangeven wanneer een (eigen gemaakte) signal geactiveerd moet worden. Dus in zekere zin je signal instructies geven.

1) Moet je emit dan binnen of buiten de functie van je eigen gemaakt signaal gebruiken?
2) En emit moet gebruikt worden in combinatie met een SIGNAL dat door Qt gemaakt is? Of niet?

3) Hoe kan ik data in een bestand toevoegen? Als ik het zo doe:

Code:
QFile file("/home/quinten/"+filename);

	if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
		return;

	QTextStream out(&file);
	out << data << endl;

	file.close();

Dan krijg doet schrijft hij het er niet bij, maar erover. bv.

Als ik eerst "olifant" toevoeg en dan "aap" staat er in m'n bestand dit:


En als ik bij open de OpenMode verander in "WriteOnly", dan staat er in mijn bestand:


Waarom verschillen deze waarden zoveel en hoe los ik dit op?
 
Laatst bewerkt:
1) emit moet niet binnen je eigen signal gebruiks worden, want met emit geef je juist aan wanneer je signal uitgevoerd moet worden.

2) Bij de signals van Qt hoef je niets meer met emit te doen, want Qt heeft al bepaald wanneer een signal geactiveerd moet worden. Met emit moet je dus alleen aangeven wanneer een signal die je zelf hebt aangemaakt geactiveerd moet worden.

1) 2)
Op het moment dat er een bepaalde functie binnen je klasse wordt aangeroepen (bijv "setValue"), dan kun je binnen die functie de regel "emit valueChanged" opnemen.
Dit betekend dat op het moment dat "setValue" wordt aangeroepen, je signal "valueChanged" ook wordt geactiveerd en daarbij dus ook alle slots die eraan verbonden zijn. Emit is dus met name bedoeld om aan te geven wanneer je signal geactiveerd moet worden.

3) ik kan zo even niets vreemds aan je code ontdekken, dus dat weet ik zo niet.
 
1) Waarom is emit eigenlijk nuttig? Of je nu dit doet:

emit functie();

of

functie()

Wat is het verschil? Of begrijp ik het verkeerd?

2) Ik heb een andere manier gevonden om het out << probleem op te lossen:

- Alles in een QString opslaan.
- Bij de destructor de inhoud van die variable wegschrijven.

Als mijn programma zou crashen, zal ie dan toch wegschrijven of niet?

3) Is er een Qt class die SSL sockets opent / verwerkt? Zonee, hoe moet ik dan SSL sockets openen / verwerken?
 
1) Bij een gewone functie zo het geen verschil maken. in dit geval is het echter geen gewone functie, maar een signal en door er emit voor te zetten zorgt qt ervoor dat je deze kunt gebruiken in een connect.

2) Bij een crash zal je programma destructor niet bereiken, dus zal je code ook niet naar je file worden geschreven.

3) Heb ik geen ervaring mee, dus ik zou het zo niet weten. :(
 
Hoe kan ik er dan voor zorgen dat de destructor wel bereikt wordt nadat het programma gecrasht is?
 
Je kunt het beste toch direct naar het bestand wegschrijven, dan weet je zeker dat alles tot de crash in je bestand terecht komt
 
Je kunt het beste toch direct naar het bestand wegschrijven, dan weet je zeker dat alles tot de crash in je bestand terecht komt

Dat deed ik toch met die vorige code, maar dan wou ie niet (zie een van m'n vorige berichten). Waarom wou ie dat dan niet?
 
Ik heb het even getest, waarschijnlijk moet je deze code:
Code:
if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
veranderen in:
Code:
if (!file.open(QIODevice::ReadWrite | QIODevice::Text|QIODevice::Append))
zodat eerder toegevoegde regels niet overschreven worden.
 
Nu werkt het wel.

1) Ik heb gezien dat er 5 SSL classes in Qt 4.3 zullen komen, dus ik wacht nog even op Qt 4.3. Is er eigenlijk al iets bekend ivm Qt 4.3 qua release data?

2) Kan ik bij de QHttpRequestHeader class dit doen:

Code:
QHttpRequestHeader header("GET", "/path/file.asp");

? Of mag je geen apart path geven?

3) Hoe kan ik een bepaald bestand url encode'en? Is daar een functie voor in Qt?
 
Laatst bewerkt:
1) Ik zou het niet weten, ik kan vrij weinig informatie vinden over een release datum voor Qt 4.3.

2) Als ik de Qt documentatie bekijk lijkt het me dat die code wel juist is, maar ik heb geen ervaring met de QHttpRequestHeader class.

3) Met behulp van de QUrl class zou je url's moeten kunnen "url encoden".
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan