2014-03-25 3 views
0

SFML을 사용하여 프로젝트를 만들고 있습니다. 모든 것이 지금까지 잘 작동했습니다. 내가 BufferHelper.cpp라는 클래스를 만든 다음 오류가 나타났습니다. 비주얼 스튜디오 프로페셔널 2013 SFML 나는 모든 libariesSFML을 연결하는 동안 오류가 발생했습니다. LNK2001

'출시 에 대한 sfml-lib.dll 년대와'를 추가 한 8.1

2.1 윈도우 sfml-LIB-D : 내가 함께 일하고

디버그

에 대한 .DLL 년대

오류 로그 :

Error 1 error LNK2001: unresolved external symbol "public: class sf::SoundBuffer __thiscall BufferHelper::MergeBuffers(class sf::SoundBuffer,class sf::SoundBuffer)" ([email protected]@@[email protected]@@[email protected]@Z) C:\Users\Krisjanis\documents\visual studio 2013\Projects\BD_Test\BD_Test\main.obj BD_Test 
Error 2 error LNK1120: 1 unresolved externals C:\Users\Krisjanis\documents\visual studio 2013\Projects\BD_Test\Release\BD_Test.exe BD_Test 

하여 Main.cpp

#include <SFML/Graphics.hpp> 
#include <SFML/Audio.hpp> 
#include <iostream> 
#include "BufferHelper.h" 

int main() 
{ 
    sf::SoundBufferRecorder recorder; 
    sf::SoundBufferRecorder recorder2; 

    sf::SoundBuffer buffer; 
    sf::SoundBuffer buffer2; 

    sf::Sound sound; 
    sf::Sound sound2; 

    int iTrackActive = 1; 

    bool bTrack1Active = true; 
    bool bTrack2Active = false; 

    sf::RenderWindow window(sf::VideoMode(1200, 800), "Loopify!"); 
    //sf::RenderWindow window(sf::VideoMode(1200, 800), "Loopify!", sf::Style::Fullscreen); 
    sf::Texture texture; 
    texture.loadFromFile("images/a.png"); 

    BufferHelper a; 
    sf::SoundBuffer finalbuffer = a.MergeBuffers(buffer, buffer2); 

    sf::Sprite sprite; 
    sprite.setTexture(texture); 

    bool recording = false; 
    if (!sf::SoundBufferRecorder::isAvailable()) 
    { 
     std::cout << "Recorder not available"; 
    } 
    else 
    { 
     std::cout << "GO AHEAD AND RECORD"; 
    } 

    while (window.isOpen()) 
    { 
     sf::Event event; 
     while (window.pollEvent(event)) 
     { 
      if (event.type == sf::Event::Closed) 
       window.close(); 
      if (event.type == sf::Event::KeyPressed) 
      { 
       if (event.key.code == sf::Keyboard::Space && !recording) 
       { 
        recording = true; 
        recorder.start(); 

       } 
       else if (event.key.code == sf::Keyboard::Space && recording) 
       { 
        recorder.stop(); 
        recording = false; 
        if (iTrackActive == 1) 
        { 
         buffer = recorder.getBuffer(); 
         sound.setBuffer(buffer); 
         sound.setLoop(true); 
         sound.play(); 
        } 
        if (iTrackActive == 2) 
        { 
         buffer2 = recorder.getBuffer(); 
         sound2.setBuffer(buffer); 
         sound2.setLoop(true); 
         sound2.play(); 
        } 
       } 
       else if (event.key.code == sf::Keyboard::Num1) 
       { 
        iTrackActive = 1; 
       } 
       else if (event.key.code == sf::Keyboard::Num2) 
       { 
        iTrackActive = 2; 
       } 
      } 
     } 
     window.clear(); 
     window.draw(sprite); 
     window.display(); 
    } 

    return 0; 
} 

BufferHelper.cpp

#include <SFML/System.hpp> 
#include <SFML/Audio.hpp> 
#include "BufferHelper.h" 
#include <iostream> 
#include <vector> 


BufferHelper::BufferHelper() 
{ 

} 

sf::SoundBuffer MergeBuffers(sf::SoundBuffer BufferOne, sf::SoundBuffer BufferTwo) 
{ 

    int iLength; 
    int iShortLength; 
    const sf::Int16* LongerSamples; 
    const sf::Int16* ShorterSamples; 

    if (BufferOne.getSampleCount() > BufferTwo.getSampleCount()) 
    { 
     LongerSamples = BufferOne.getSamples(); 
     ShorterSamples = BufferTwo.getSamples(); 
     iLength = BufferOne.getSampleCount(); 
     iShortLength = BufferTwo.getSampleCount(); 
    } 
    else 
    { 

     LongerSamples = BufferTwo.getSamples(); 
     ShorterSamples = BufferOne.getSamples(); 
     iLength = BufferTwo.getSampleCount(); 
     iShortLength = BufferOne.getSampleCount(); 
    } 

    std::vector<sf::Int16> FinalSamplesVector; 
    FinalSamplesVector.reserve(iLength); 

    for (int i = 0; i < iLength; i++) 
    { 
     if (i < iShortLength) 
     { 
      double dSampleOne = (LongerSamples[i] + 32768.)/65535.; 
      double dSampleTwo = (ShorterSamples[i] + 32768.)/65535.; 
      double dResult = 0; 

      if (dSampleOne < 0.5 && dSampleTwo < 0.5) 
      { 
       dResult = 2 * dSampleOne * dSampleTwo; 
      } 
      else 
      { 
       dResult = 2 * (dSampleOne + dSampleTwo) - 2 * dSampleOne * dSampleTwo - 1; 
      } 

      FinalSamplesVector.push_back(static_cast<sf::Int16>(dResult * 65535. - 32768.)); 
     } 
     else 
     { 
      FinalSamplesVector.push_back(LongerSamples[i]); 
     } 
    } 

    sf::SoundBuffer FinalBuffer; 
    FinalBuffer.loadFromSamples(&FinalSamplesVector[0], FinalSamplesVector.size(), 2, 44100); 

    return FinalBuffer; 
} 

BufferHelper::~BufferHelper() 
{ 
} 

BufferHelper.h

#pragma once 
#include <SFML/Graphics.hpp> 
#include <SFML/Audio.hpp> 
using namespace sf; 
class BufferHelper 
{ 
public: 
    BufferHelper(); 

    sf::SoundBuffer MergeBuffers(sf::SoundBuffer, sf::SoundBuffer); 

    ~BufferHelper(); 
}; 

I 피드백의 종류를받을 것이 감사 할 것입니다.

답변

1

MergeBuffers() 함수의 본문을 선언하지 않았습니다. 이 당신의 CPP 파일에

sf::SoundBuffer BufferHelper::MergeBuffers(sf::SoundBuffer, sf::SoundBuffer) 
{ 
// some code 
} 

를 추가 SFML와는 아무 상관이없는.

편집 : 실수로 main.cpp 파일 코드를 다시 복사했음을 알았습니다. BufferHelper.cpp에 대한 좋은 코드를 보여주십시오.

+0

감사합니다. 틀린 코드를 실수로 복사했습니다. 작은 코드로 나에게 올바른 방법을 보여주었습니다 ... – krishkule

관련 문제