2017-08-20 4 views
-2

メソッドのヘッダーにある変数またはtypedefにアクセスするにはどうすればよいですか?ヘッダファイルをインクルードしてもtypedefがグローバルではないようですが、なぜですか?複数のヘッダー、オブジェクトの関数の使い方

Snake.h

#ifndef SNAKE_H 
#define SNAKE_H 
#include <utility> 

class Snake { 
public: 
    Snake(int difficulty, int posX, int posY) : difficulty(difficulty) { 
     position.first = posX; 
     position.second = posY; 
    } 
    inline std::pair<int,int> const getPosition() { 
     return position; 
    } 

private: 
typedef std::pair<int, int> Point; 
    Point position; 
}; 

#endif // !Snake.h 

Movement.cpp

#include "Movement.h" 
#include "Snake.h" 

Snake moveDown() { 

    Point dummy = SnakeObject.getPosition(); 
    return .....; 
} 

今、明らかに欠けているものがあるので、これはコンパイルされませんが、コンパイラ:

私は、次のような状況を持っていますMovement.cppファイルのPoint型を認識できません。 また、Movement.hにSnakeポインタが必要なので、snakeオブジェクトを使用してgetPositionを呼び出すことはできますか?

曖昧な説明には申し訳ありませんが、あなたのご協力も大変ありがとうございます。

+1

あなたが 'typedef'を定義したスコープを見てください。 – Rakete1111

答えて

1

Pointは、privateクラスメンバーとして宣言されているため、非クラスメンバーはアクセスできません。

それpublicクラスメンバーに、(メソッドの宣言された戻り型が実際に指定するように)代わりに基礎となるstd::pairタイプを使用するか、autoに戻り値を割り当てるのいずれか。

+1

「公開」にしても、今のようにアクセスすることはできません。適切な型名 'Snake :: Point dummy ='が必要です。 – VTT

+0

ありがとうございます、今は少しはっきりしています。それは、プライベートなtypedefが.cppファイルにしかカウントしないことを意味しますか? また、パブリックtypedefを変更する可能性はありますか? – mxOx2kL

関連する問題