2016-11-09 1 views
0

я создал класс под названием Room следующимКак вернуть указатель на член класса из функции

#ifndef ROOM_H 
#define ROOM_H 
#include <string> 

class Room 
{ 
private: 
    std::string name; 
    std::string description; 
    Room* south; 
    Room* north; 
    Room* east; 
    Room* west; 
public: 

    //CONSTRUCTOR 
    Room(); 
    Room(std::string name, std::string desc); 

    //METHODS 
    std::string getName(); 
    std::string getDescription(); 
    void link(Room *r, std::string direction); 
    Room *getLinked(std::string direction); 
    void printLinked(); 

    ~Room(); 


}; 

#endif // ROOM_H 

/******************* ************************************************** ****/

void Room::link(Room *r, std::string direction) 
{ 

    if (direction == "south")//THIS IS JUST FOR TEST 
    { 
     this->south = this->getName(); 
    } 
} 
/*************************************************/ 
Room Room::*getLinked(std::string direction) 
{ 
    return south; 
} 

И вот мой вопрос в getLinked методе, как я могу вернуть указатель (например, south, north, east, west)

+6

Правильный синтаксис будет 'номер * номер :: getLinked (направление станд :: строка)'. – Steeve

+1

Можете ли вы попытаться урезать свой вопрос до [MCVE], который воспроизводит вашу проблему, пожалуйста? –

+0

Рассмотрите возможность использования 'const std :: string & direction' в качестве параметров, чтобы избежать ненужного копирования строк. – Steeve

ответ

2

Вы действительно спрашиваете, какой правильный синтаксис определения для функции Room::getLinked() есть?

Ну, вот вы идете:

Room* Room::getLinked(std::string direction) { 
    if(direction == "south") { 
     return south; 
    } 
    // ... the other directions 
    return nullptr; 
} 
+0

Я получал ошибки с моим кодом, и я полностью забыл взглянуть на синтаксис метода. Спасибо, что ваш ответ очень помог –

Смежные вопросы