Verweis auf nicht aufgelöstes externes Symbol warum?



  • Hi

    Ich programmiere gerade eine Spiel. Nun bin ich am initialisieren des Sounds. Doch da ich im Bereich DirectX Audio noch nicht so gewandt bin, treten solche Fehler auf: Verweis auf nicht aufgelöstes externes Symbol. Habe ich eine Lib vergessen zu linken oder was habe ich falsch gemacht?

    Hier ist der Code:

    // Sound.h
    //
    #ifndef SOUND_HPP
    #define SOUND_HPP
    
    #include "dmutil.h"
    #include <windows.h>
    
    #define SAFE_DELETE(a) if( (a) != NULL ) delete (a); (a) = NULL;
    
    class CSound
    {
    public:
    
    	void PlayMusic(CMusicSegment * pSound);
    	void StopMusic(CMusicSegment * pSound);
    	void NewVolume(long Volume);
    	void CreateSoundObjects(HWND hwnd);
    	void DestroySoundObjects();
    
    private:
    
    	CMusicManager * g_pMusicManager;
    	CMusicSegment * g_pBackgroundMusic;
    
    };
    
    #endif
    
    // Sound.cpp
    //
    #include "Sound.h"
    
    void CSound::PlayMusic(CMusicSegment* pSound)
    {
    	if(pSound) pSound->Stop(DMUS_SEGF_DEFAULT );
    
    	if(pSound) pSound->SetRepeats(DMUS_SEG_REPEAT_INFINITE );
        if(pSound) pSound->Play( DMUS_SEGF_DEFAULT );
    }
    
    void CSound::StopMusic(CMusicSegment* pSound )
    {
        if( pSound ) pSound->Stop(DMUS_SEGF_DEFAULT );	
    }
    
    void CSound::NewVolume( long Volume )
    {
        // wirkt sich auf alle Musik und Sound-Segmente aus
        g_pBackgroundMusic->SetVol(Volume );  
    }
    
    void CSound::CreateSoundObjects(HWND handle)
    {
    	// CMusicManager-Objekt erzeugen:
        g_pMusicManager = new CMusicManager();
        g_pMusicManager->Initialize(handle);
    
        g_pMusicManager->CreateSegmentFromFile(&g_pBackgroundMusic, "Backgroundmusic.wav");
    }
    
    void CSound::DestroySoundObjects(void)
    {
        if(g_pMusicManager) g_pMusicManager->StopAll(); 
        SAFE_DELETE(g_pBackgroundMusic)
        SAFE_DELETE( g_pMusicManager )
    }
    

    Hier ist die Fehlermeldung:

    1>------ Erstellen gestartet: Projekt: Second Chance Game, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>Sound.cpp
    1>Code wird generiert...
    1>Kompilieren...
    1>Direct3DGraphics.cpp
    1>InitD3D.cpp
    1>SecondChance.cpp
    1>Code wird generiert...
    1>Verknüpfen...
    1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: long __thiscall CMusicSegment::SetRepeats(unsigned long)" (?SetRepeats@CMusicSegment@@QAEJK@Z)" in Funktion ""public: void __thiscall CSound::PlayMusic(class CMusicSegment *)" (?PlayMusic@CSound@@QAEXPAVCMusicSegment@@@Z)".
    1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: long __thiscall CMusicSegment::Stop(unsigned long)" (?Stop@CMusicSegment@@QAEJK@Z)" in Funktion ""public: void __thiscall CSound::PlayMusic(class CMusicSegment *)" (?PlayMusic@CSound@@QAEXPAVCMusicSegment@@@Z)".
    1>Sound.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_GUID_PerfMasterVolume".
    1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: long __thiscall CMusicManager::CreateSegmentFromFile(class CMusicSegment * *,char *,int,int)" (?CreateSegmentFromFile@CMusicManager@@QAEJPAPAVCMusicSegment@@PADHH@Z)" in Funktion ""public: void __thiscall CSound::CreateSoundObjects(struct HWND__ *)" (?CreateSoundObjects@CSound@@QAEXPAUHWND__@@@Z)".
    1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: long __thiscall CMusicManager::Initialize(struct HWND__ *,unsigned long,unsigned long,struct IDirectSound *)" (?Initialize@CMusicManager@@QAEJPAUHWND__@@KKPAUIDirectSound@@@Z)" in Funktion ""public: void __thiscall CSound::CreateSoundObjects(struct HWND__ *)" (?CreateSoundObjects@CSound@@QAEXPAUHWND__@@@Z)".
    1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CMusicManager::CMusicManager(void)" (??0CMusicManager@@QAE@XZ)" in Funktion ""public: void __thiscall CSound::CreateSoundObjects(struct HWND__ *)" (?CreateSoundObjects@CSound@@QAEXPAUHWND__@@@Z)".
    1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CMusicManager::StopAll(void)" (?StopAll@CMusicManager@@QAEXXZ)" in Funktion ""public: void __thiscall CSound::DestroySoundObjects(void)" (?DestroySoundObjects@CSound@@QAEXXZ)".
    1>Sound.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CMusicManager::~CMusicManager(void)" (??1CMusicManager@@QAE@XZ)" in Funktion ""public: void * __thiscall CMusicManager::`scalar deleting destructor'(unsigned int)" (??_GCMusicManager@@QAEPAXI@Z)".
    1>C:\Dokumente und Einstellungen\Patrick\Eigene Dateien\Visual Studio 2008\Projects\Second Chance Game\Debug\Second Chance Game.exe : fatal error LNK1120: 8 nicht aufgelöste externe Verweise.
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Patrick\Eigene Dateien\Visual Studio 2008\Projects\Second Chance Game\Second Chance Game\Debug\BuildLog.htm" gespeichert.
    1>Second Chance Game - 9 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Ich habe folgende Lib´s gelinkt:

    d3dx9.lib
    d3d9.lib
    d3dxof.lib
    dxguid.lib
    dinput8.lib
    dsound.lib

    Kann mir jemand helfen?

    Gruss Patrick



  • Du scheinst in der Klasse CMusicSegment etwas vergessen zu haben zu implementieren.

    Lies mal die Fehlermeldung. Dort stehen zu welchen Funktionen er keine Implementierung findet. Und die kommen alle samt aus CMusicSegment.



  • Doch CMusicSegment ist eine Klasse aus dmutil.h, ich kann mir schlecht vorstellen, dass dort etwas fehler soll.



  • nö dort ist auch nicht der Fehler - der fehler ist einfach, das er die zugehörige cpp Datei bzw. lib nicht finden kann



  • Selbiges Problem.

    Ich habe rausgefunden, daß nur die .hpp reingenommen wird, nicht aber die zugehörige cpp, in der Teile der Klasse definiert werden, welche der Compiler bemängelt.

    Wie löst man das Problem?



  • Ja, habe alle Dateien angemeldet im Projekt. Kein Fehler mehr.


Anmelden zum Antworten