Datum: 02.05.2008 12:32
Ich hab zu meinem MDI Projekt einen weiteren View und eine weitere
Documentenklasse hinzugefügt.
Diese werden in der InitInstance() im MultiDocTemplate registriert.
Documentklasse: class CSendeDoc : public CDocument
Viewklasse: class CSendeverlauf : public CFormView
Nun benötige ich noch eine GetDocument() in meiner Viewklasse. Dafür hab
ich diese als Memberfunktion eingefügt.
Sendeverlauf.h
class CSendeverlauf : public CFormView
{
protected:
CSendeverlauf(); // Dynamische Erstellung verwendet
geschützten Konstruktor
DECLARE_DYNCREATE(CSendeverlauf)
// Formulardaten
public:
CSendeDoc* GetDocument();
Sendeverlauf.cpp
CSendeDoc* CSendeverlauf::GetDocument()
{
return (CSendeDoc*)m_pDocument;
}
Nun bekomm ich Fehler beim kompilieren. Das einzige was anderst als bei
der vorgegebenen Documenten/View ist, das der View hier CFormView als
Basisklasse hat und nicht CView.
Die müsste trotzdem gehn oder?
Datum: 02.05.2008 13:43
Sebastian Ulmer wrote:
> Nun bekomm ich Fehler beim kompilieren.
Welche?
Datum: 02.05.2008 13:47
Syntaxfehler : Fehlendes ';' vor '*' 'CSendeDoc' : Fehlende Speicherklasse oder Typbezeichner 'Get Document' : Fehlende Speicherklasse oder Typbezeichner
Datum: 02.05.2008 13:53
Sebastian Ulmer wrote: > Syntaxfehler : Fehlendes ';' vor '*' > 'CSendeDoc' : Fehlende Speicherklasse oder Typbezeichner > 'Get Document' : Fehlende Speicherklasse oder Typbezeichner OK. Diese Fehlermeldungen sind immer ein Indiz dafür dass ein Datentyp nicht bekannt ist. Entweder ist das ein Tippfehler oder es fehlt ein #include In deinem Fall wird es wohl so sein, dass der Compiler nicht weis was denn ein CSendeDoc sein soll. Also mal überprüfen, ob am Anfang des Header Files auch das include erfolgt, mit dem CSendeDoc hereingezogen wird. In seltenen Fällen kann es auch dazu kommen, dass sich 2 Header Files gegenseitig includieren, weil jede Klasse den Namen der anderen Klasse benötigt. Das kann klarerweise nicht gehen und man muss sich mit einer Forward-Deklaration aus der Patsch helfen: Sendeverlauf.h
class CSendeDoc; // CSendeDoc gibt es tatsächlich. Wenn dieser // Name im folgenden auftaucht, dann handelt es // sich nicht um einen Tippfehler, sondern um den // Namen einer Klasse. Näheres ist über diese Klasse // nicht bekannt. Braucht es aber auch nicht, denn // zur Vereinbarung eines Pointers reicht es schon, // wenn der Compiler weiss, dass es eine Klasse dieses // Namens gibt. class CSendeverlauf : public CFormView { protected: CSendeverlauf(); // Dynamische Erstellung verwendet geschützten Konstruktor DECLARE_DYNCREATE(CSendeverlauf) // Formulardaten public: CSendeDoc* GetDocument(); |
Datum: 02.05.2008 14:12
achso, ich muss die SendeDoc.h dann auch in der SendeView.h includen, es reicht nicht wenn diese in der SendeView.cpp includiert ist. Danke für eure Mühen
Datum: 02.05.2008 14:15
Sebastian Ulmer wrote: > achso, ich muss die SendeDoc.h dann auch in der SendeView.h includen, > es reicht nicht wenn diese in der SendeView.cpp includiert ist. Das kommt drauf an in welcher Reihenfolge die includes in SendeView.cpp sind. Aber am besten machst du es dir zur Gewohnheit, dass jedes File alles an includes hat, was es braucht. SendeView.h benötigt die Kentniss von CSendeDoc. Diese Klasse wiederrum steht in einem anderen Header File. Ergo inkludiert SendeView dieses Header File um zum SendeDoc zu gelangen. Tust du das nicht, dann bürdest du immer dem Verwender von SendeView.h auf, dass er daran denken muss, SendeDoc.h vor SendeView.h zu inkludieren.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel