2012-03-06 13 views
0

私は単語のチュートリアルの言葉に従っていますが、私はチュートリアルを作った人から解答を得ることができなかったエラーを取得します! http://www.gamefromscratch.com/page/Game-From-Scratch-CPP-Edition-Part-6.aspx'tagINPUT'のメンバーではありません

私が手にエラーがある:

void PlayerPaddle::Update(float elapsedTime) 
{ 
if(Game::GetInput().IsKeyDown(sf::Key::Left)) 
{ 
    _velocity-=3.0f; 
} 
if(Game::GetInput().IsKeyDown(sf::Key::Right)) 
{ 
    _velocity+=3.0f; 
} 
if(Game::GetInput().IsKeyDown(sf::Key::Down)) 
{ 
    _velocity = 0.0f; 
} 

if(_velocity > _maxVelocity) 
    _velocity = _maxVelocity; 

if(_velocity < -_maxVelocity) 
    _velocity = -_maxVelocity; 

sf::Vector2f pos = this->GetPosition(); 

if(pos.x <= GetSprite().GetSize().x/2 || 
    pos.x >= (Game::SCREEN_WIDTH - GetSprite().GetSize().x/2)) 
{ 
    _velocity = -_velocity; 
} 

GetSprite().Move(_velocity * elapsedTime, 0); 
} 

:このスクリプトセクションで

playerpaddle.cpp(32): error C2039: 'IsKeyDown' : is not a member of 'tagINPUT' 
c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(5332) : see  declaration of 'tagINPUT' 

playerpaddle.cpp(36): error C2039: 'IsKeyDown' : is not a member of 'tagINPUT' 
c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(5332) : see declaration of 'tagINPUT' 

playerpaddle.cpp(40): error C2039: 'IsKeyDown' : is not a member of 'tagINPUT' 
c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winuser.h(5332) : see declaration of 'tagINPUT' 

1>c:\users\dave\c++\pang\playerpaddle.cpp(54): error C2064: term does not evaluate to a function taking 1 arguments 

私はそれが間違っていたあるチュートリアルのこのセクションに着い私はある人のために私のプロジェクトを添付しました: http://tinyurl.com/7evajju

答えて

4

Gameのstatic GetInput()は、Windowsの構造体を返しています。構造体がデータとメソッドしか持たないので、あなたが望むものではないことは間違いありません。この関数は実際には実装されていないので、単にエラーを消してしまうと、未定義のシンボルに対してリンカーエラーが発生します。

Windowsのtypedefがどのように構造体を宣言するかの効果として、 '_tagINPUT'と表示されます。あなたはおそらくで定義されている「入力」クラスを返すことを意図し

は\ SFML \ウィンドウ\ Input.hppが

私はあなたが通常SFML Windowクラスに()を呼び出すか、getInputうと考えています。だから、多分あなたが望むすべてではなく、持っているgame.hた

const sf::Input& GetInput() { return _mainWindow.GetInput(); } 

私はあなたがゲームプログラミングに深く潜水する前に、言語としてC++に焦点を当ててもと思います。あなたが興味を持っているだけのゲームプログラミングがあれば、ゲームを作るためのより高いレベルの技術を調べたいかもしれません。言語を理解することに投資することなくC/C++道路を降りることは、あなたがやっていることを憎むようになるほどの痛みを引き起こす可能性があります。これは残念です。

+0

私は理解していないのはチュートリアルがうまくいかない理由ですが、私が同じコード=/ – Sir

+1

のときは私が同じコードではありません。ジョーは問題を釘付けにした。元のコードは:const static sf :: Input&GetInput();あなたのコードは:const static :: INPUT&GetInput();です。入力と入力は2つの非常に異なるものです。 – Serapth

+0

さらに詳しく述べると、 'Input'はユーザ定義クラスであり、' INPUT'は入力情報を保持するためのウィンドウデータ構造です。これは 'SendInput'関数で使われます。また、 'INPUT'構造体は実際には' _tagINPUT'構造体のtypedefです。 – chris

関連する問題