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)?