2017-08-20 1 views
-2

Wie Zugriff auf eine Variable oder Typedef in einer Kopfzeile von einer Methode? Es scheint, dass die Typedef nicht global ist, obwohl ich die Header-Datei enthalten, warum?Mehrere Header, wie Funktion für Objekt

Ich habe folgende Situation:

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 .....; 
} 

Jetzt offensichtlich dies nicht kompiliert, da Sachen fehlen, aber der Compiler erkennt den Point-Typ in der Movement.cpp-Datei nicht. Benötige ich auch einen Snake-Zeiger im Movement.h, damit ich das snake-Objekt verwenden kann, um getPosition aufzurufen?

Es tut mir leid für die vage Beschreibung, auch Ihre Hilfe wird sehr geschätzt.

+1

Schau dir an, in welchem ​​Umfang du deinen 'typedef' definiert hast. – Rakete1111

Antwort

1

Point ist als private Klassenmitglied deklariert, als solches ist es für Nicht-Klassenmitglieder nicht zugänglich.

Entweder es ein public Klassenmitglied machen, verwenden, um den zugrunde liegenden std::pair Typen statt (wie das deklarierte Rückgabetyp der Methode gibt tatsächlich) oder den Rückgabewert auf ein auto zuweisen.

+1

Auch wenn Sie es öffentlich machen, können Sie nicht darauf zugreifen, wie Sie es jetzt tun. Sie benötigen den richtigen Typnamen 'Snake :: Point dummy ='. – VTT

+0

Danke, es ist jetzt ein bisschen klarer. Heißt das, dass eine private typedef nur für die entsprechende .cpp-Datei zählt? Gibt es auch eine Möglichkeit, dass ein öffentlicher Typedef geändert werden könnte? – mxOx2kL