Seite 1 von 1

[Visual Studio] Include-Problem

Verfasst: 29.06.2011, 12:24
von Brainsmith
Hallo,

ich habe seti kurzem ein Problem und leider keine Ahnung woher das rührt:

ich will X3DAudio.h aus dem DX-SDK includieren. Im Header geht das nicht, aber in der cpp-Datei schon. Nun ergibt sich mir die Idee, dass ich irgendwas falsch verlinkt haben muss.. Aber was?
Die Fehlermeldung beim linken in der Header-Datei lautet:
fatal error C1083: Datei (Include) kann nicht geöffnet werden: "X3DAudio.h": No such file or directory

Wenn ich in der cpp-Datei linke, passiert das nicht. Kann mir das evtl jmd erklären? Stehe da ziemlich aufm Schlauch

Re: [Visual Studio] Include-Problem

Verfasst: 29.06.2011, 12:50
von Krishty
Header werden nicht kompiliert – sie werden von einer anderen Definitionsdatei eingebunden und dann in dieser kompiliert. Ergo ist das Problem eher, dass das Einbinden von der einen Definitionsdatei aus funktioniert, aber von der anderen aus nicht.

Das kann passieren, wenn die einbindende Datei nicht Teil deines Projekts ist, oder Teil deines Projekts ist und just umbenannt wurde und darum die Projekteinstellungen nicht mehr für sie gültig sind, oder sie zu einem anderen Projekt derselben Lösung gehört o.Ä. … mal ganz banal versucht, alles zu speichern und Visual Studio neu zu starten?

Gruß, Ky

Re: [Visual Studio] Include-Problem

Verfasst: 29.06.2011, 13:20
von Brainsmith
Ich bekomme eine ganze Menge an Fehlern ausgegeben. Ein Neustart hat mir bisher auch nicht geholfen.

Zur Lösung: Ich habe eine Solution, die zwei Projekte beinhaltet. Einmal meine Soundengine und eine 3D-Testumgebung, die eigentlich nur eine dirty main-Methode ist. Die Soundengine wird automatisch in die main gelinkt. Dann muss der Fehler ja irgendwie dort herrühren. Allerdings bin ich ratlos, wie ich das beheben soll..


Hier mal die Fehlerliste. Wirres Zeug, von dem ich nicht genau weiß, was ich davon halten soll.
Fehler 1 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'ContextRecord' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 6361
Fehler 2 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 6361
Fehler 3 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 6361
Fehler 4 error C2065: 'PCONTEXT': nichtdeklarierter Bezeichner c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 12983
Fehler 5 error C2146: Syntaxfehler: Fehlendes ')' vor Bezeichner 'ContextRecord' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 12984
Warnung 6 warning C4229: Anachronismus verwendet: Modifizierer der Daten werden ignoriert c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 12984
Fehler 7 error C2182: 'RtlCaptureContext': Unzulässige Verwendung des Typs 'void' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 12984
Fehler 8 error C2491: 'RtlCaptureContext': Definition von Daten für dllimport nicht zulässig c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 12984
Fehler 9 error C2059: Syntaxfehler: ')' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 12984
Fehler 10 error C2143: Syntaxfehler: Es fehlt ';' vor '__stdcall' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 13372
Fehler 11 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 13372
Fehler 12 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 13376
Fehler 13 error C3861: "__readfsdword": Bezeichner wurde nicht gefunden. c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h 14982
Fehler 14 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'LPCONTEXT' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 1048
Fehler 15 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 1048
Fehler 16 error C2378: 'PCONTEXT': Neudefinition; Symbol kann nicht mit typedef überladen werden c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 1048
Fehler 17 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 1048
Fehler 18 error C2061: Syntaxfehler: Bezeichner 'PCONTEXT' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 3610
Fehler 19 error C2061: Syntaxfehler: Bezeichner 'LPCONTEXT' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 4449
Fehler 20 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 4457
Fehler 21 error C2143: Syntaxfehler: Es fehlt ',' vor '*' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 4457
Fehler 22 error C2143: Syntaxfehler: Es fehlt ';' vor '__stdcall' c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 15112
Fehler 23 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 15112
Fehler 24 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winbase.h 15116
Fehler 25 error C1083: Datei (Include) kann nicht geöffnet werden: "X3DAudio.h": No such file or directory g:\programming\spartansound\spartansound\spartansound.h 16

Re: [Visual Studio] Include-Problem

Verfasst: 29.06.2011, 13:24
von joggel
Irgendwie kommen die Fehlermeldung mir bekannt vor .... :? .
Bindest Du irgendwo die "windows.h" oder so etwas ein?
"windef.h"??? Irgendsowas?

Re: [Visual Studio] Include-Problem

Verfasst: 29.06.2011, 13:30
von Brainsmith
in der stdafx.h binde ich folgende Dateien manuell ein:

Code: Alles auswählen

#include <stdlib.h>
#include <crtdbg.h>
#include <assert.h>
stdafx bindet ja selber noch (gefühlte) zig Millionen Header ein. Die kann ich allerdings nicht nachprüfen.

in meiner Soundengine binde ich im Header nur folgendes ein:

Code: Alles auswählen

#include "stdafx.h" // (ich weiß, dass es da eigentlich nicht hingehört. muss ich bei Zeiten mal ändern)
#include <string>
In der cpp binde ich dann die hier ein:

Code: Alles auswählen

#include "stdafx.h"
#pragma hdrstop

#include "SpartanSound.h"
#include <XAudio2.h>
#include "SoundSource.h"
die main im zweiten Projekt bindet ne ganze Menge ein:

Code: Alles auswählen

#include <windows.h>
#include <windowsx.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <vector>
#include <string>
#include <time.h>
#include <sstream>
#include <math.h>

Re: [Visual Studio] Include-Problem

Verfasst: 29.06.2011, 13:38
von joggel
Mal ein Schuss ins Blaue:
Binde mal vor dem 1sten (also, nach dem #pragma..) include in deiner SoundEngine CPP die "windows.h" ein....

[Edit]
Ähnliches Problem, fand ich gerade:
http://social.msdn.microsoft.com/Forums ... 82b2aaaba/

Re: [Visual Studio] Include-Problem

Verfasst: 29.06.2011, 14:03
von Brainsmith
Das ist ja schonmal irre... Alle Fehler bis auf die Tatsache, dass er die Datei nicht findet, sind nun weg. Vielen Dank

Leider ist mein Problem noch nicht gelöst.
Ich habe in den Projekteinstellungen ordnungsgemäß alle Includeverzeichnisse gelinkt. Sonst würden die Dateien ja in den cpp-Files nicht gefunden werden.
Wenn ich im Header den Pfad hardcode, funktioniert das.. Das irritiert mich. Ich arbeite häufig an verschiedenen Rechnern an der Soundengine. Daher wäre es schlecht, wenn ich jedesmal den Pfad ändern müsste.

bisher hab ich den Include-Pfad folgendermaßen angegeben: $(DXSDK_DIR)Include

Ein Neustart von Visual Studio hilft da leider nicht und auch ein kompletter rebuild bringt mir nix.
Falls jemand ne Idee hat, bin ich für alle Vorschläge offen.

Und danke an euch beide für die Hilfe bisher

Re: [Visual Studio] Include-Problem

Verfasst: 29.06.2011, 14:07
von joggel
Brainsmith hat geschrieben:Das ist ja schonmal irre... Alle Fehler bis auf die Tatsache, dass er die Datei nicht findet, sind nun weg. Vielen Dank
...
Wenn ich im Header den Pfad hardcode, funktioniert das..
Heißt das, dass es nun geht, wenn du den Pfad im Header selber angibst "hardcode".
Oder das nun keine Fehlermeldung mehr kommen, aber dafür *nur* die Meldung "Bla-Bla.h" nicht gefunden? :)

Re: [Visual Studio] Include-Problem

Verfasst: 29.06.2011, 14:11
von Brainsmith
Wenn ich den Pfad manuell im Header angebe, funktioniert alles.
Natürlich will ich den nicht manuell angeben, weil ich ja verschiedene Rechner benutze, um daran zu programmieren. Da ist das DX-SDK auf anderen Festplatten installiert.

Edit:
Ich hab das Problem gelöst. Zwar waren in der Soundengine die Includepfade des DX-SDK gelinkt, aber nicht im main-Projekt.
Da musste ich die Verzeichnisse noch hinzufügen. Danach gings.

Ich frage mich allerdings, warum das gelinkt werden muss. Ich erzeuge eine Lib und X3DAudio linke ich auch als Lib... Ergo müsste die in meiner Lib enthalten sein und nicht extra gelinkt werden... bin verwirrt..

Re: [Visual Studio] Include-Problem

Verfasst: 29.06.2011, 15:02
von BeRsErKeR
Was haben Includepfade denn mit Linken zu tun? Wenn du die Funktionalität einer Lib nutzen willst brauchst du dennoch die Headerfiles um bestimmte Datenstrukturen usw nutzen zu können. Wenn du also in deinem main-Projekt explizit was aus anderen Libs brauchst, dann musst du da natürlich auch die entsprechenden Header includen und die Include-Pfade bekannt machen (wobei sowas auch in den globalen VS Optionen für alle Projekte geht). In der Lib sind doch nur die kompilierten Sachen drin. Zum Programmieren benötigst du dennoch die Deklarationen von Klassen usw.

Und da dein Problem augenscheinlich nach Compiler/Präprozessor und nicht nach Linker klingt, hat das alles nicht viel mit Linken zu tun.

Re: [Visual Studio] Include-Problem

Verfasst: 30.06.2011, 08:30
von Brainsmith
Ich Volldepp.... Ich habe die Datei im Header eingebunden, den die Main einbindet und es geschafft, das nicht zu bemerken.. Natürlich hast du recht, Herr Zealot.