Frage

Ich habe ein Problem mit einer einfachen Datei enthalten.

Die Datei enthalten wird, ist in zwei MFC-Programmen - von denen eine DLL ist, und es erstellt auch selbst in einen nicht-mfc dll

.

Vor kurzem war ich mit dem größeren dll, die um die wickelt Quelle des kleineren dll, wenn ich Zugriff auf einige der Merkmale des ursprünglichen Codes wollte, die nicht durch die größere dll ausgesetzt ist.

Da dies ein Test war ich einfach die Quelle zu meinem Projekt hinzugefügt und die Funktionen aufgerufen. Ich habe diesen Fehler: Syntaxfehler: fehlen ')' vor ''

Die Datei wird korrekt enthalten ist, und ich habe sowohl die CPP und die .h im Quellordner, und im Rahmen des Projekts, aber es würde nicht kompilieren.

Ich habe schließlich ein sehr kleines Testprojekt, main.cpp, spooler.cpp und spooler.h (der Spooler ist ein Wrapper um die Comms) und versucht, das zu kompilieren. Gleiches Problem.

So riss ich nur für den Fall all dll bezogenes da draußen eine seltsame Problem mit, dass los ist und es immer noch nicht kompiliert werden.

Ich kann nicht über das Leben von mir denken, was falsch ist. Hat jemand irgendwelche Ideen?

P. S. Jeff Sie wirklich brauchen, um die Fähigkeit, in den Dateien anhängen, weil die Quelle viele Bildschirme mit Daten füllen würde.

War es hilfreich?

Lösung

Das hat nichts mit der Art und Weise Sie Include-Dateien zu tun, es ist ein Syntaxfehler, die Sie erhalten, weil Sie nicht richtig Nest ( und ) hat.

Andere Tipps

Erstellen Sie die / P-Option, die eine vorverarbeiteten Datei erstellen (in der Regel mit der .i Erweiterung).

In Visual Studio, die Option auf den Eigenschaften für das Projekt unter etwas sein wie:

C/C++  -  Preprocessor  -   Generate Preprocessed File

Damit Sie genau sehen können, wie Makros erweitert werden. Möglicherweise müssen Sie die .i-Datei durch den Compiler laufen die genaue Zeile zu finden, die den Syntaxfehler verursacht. Es kann ein Schmerz, die post-vorverarbeiteten Datei zu lesen, aber es sollte zeigen, was los ist.

Ohne die Quelle ist es schwer, sicher, genau das zu sein, was geschieht. Vom ersten Teil Ihrer Frage scheint es so bestimmter Code korrekt in dem Projekt kompiliert, wo es zuerst verwendet wurde, aber wenn Sie es in Ihrem zweiten Projekt sind es nicht mehr kompiliert. Ist dies der Fall, dass Sie wollen, zu betrachten, was andere Header vor diesem enthalten sind. Manchmal, wenn Ihre Funktion oder Variablennamen sind die gleichen wie etwas in einem anderen Header definiert, insbesondere Windows.h, dann können Sie Fehler von Code erhalten, die bisher ohne Probleme zusammengestellt.

Wenn dieser Code hat nie korrekt kompiliert, dann die anderen Antworten darauf hindeutet Sie das Öffnen / Schließen prüfen „(“ sind wahrscheinlich der beste Platz zu starten.

Ihr Compiler sollte Ihnen sagen, was die Fehlerzeile eingeschaltet war. Suchen Sie dann nach dem vorherigen „(“ vor dem Ende der Zeile.

Sie müssen herausfinden, was die Dinge zu erweitern, um. Insbesondere was ist ID_SPOOLER_EVENT? Wenn es unausgeglichene Klammern hat, ist, dass Ihr Schuldige. Wenn nicht, gut, gehen Sie mit Mike B Rat ab. Dies sieht aus wie ein Vorprozessor Problem für mich.

Der Code, der verwendet wird:

// the only two includes
#include <windows.h>
#include "spooler.h"
// in WinMain
// create window then...
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);

SpoolerInitiallize( hwnd, ID_SPOOLER_EVENT ); // <-- our function
...

Und ja, ich weiß, ist es Dinkel falsch und das Wort Initialise fälschlicherweise auch in der Dokumentation geschrieben. Leider kann sie nicht mehr geändert werden, da wir auch diese dll an Dritte liefern.

Versuchen Sie, was Mike B mit dem Vorprozessor gesagt.

Dieser Vorschlag erinnerte mich, warum dieser Fehler so bekannt vorkam. Für mich war es eine sehr kurze #define, die einen Variablennamen mit einem wörtlichen int oder so ähnlich waren zu ersetzen. Nasty.

durch den preproccessor den Code laufen zu lassen ist, wie ich herausgefunden habe, was los war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top