2013-08-29 4 views
0

Я использую SFML, и я хочу вернуть что-то, что я называю классом. Поэтому я хочу получить полезную нагрузку и вернуть ее. Как мне это сделать, когда payload - это класс?Как вернуть класс в функцию с C++?

sf::Packet payload; 

Как это вернуть?

/** 
* Gets the payload. 
*/ 
int LoginPacket::getPayload() { 
    return payload; 
} 

Каждый способ, которым я пытаюсь, я просто получаю ошибки. Должен ли я использовать указатели? Это просто потому, что полезная нагрузка идентифицируется как класс, и компилятор говорит мне, что невозможно преобразовать ее в int? Итак, как мне его преобразовать или что мне делать?

ответ

3

Что вы хотите вернуть функцию? Если вы хотите, чтобы он возвращал int, что означает этот int? Это поле в пакете, который вы хотите получить? Если вы хотите вернуть весь пакет, вы можете сделать это.

sf::Packet& LoginPacket::getPayload() 
{ 
    return payload; 
} 

Вызывающий функция может редактировать полезную нагрузку или делать ее копию, если захочет. Вы можете сделать это только для чтения, добавив константу

const sf::Packet& LoginPacket::getPayload() const 
{ 
    return payload; 
} 
0

Давайте посмотрим, что такое объявление функции на C++.

[тип возврата] [имя функции] (аргументы);

Вы сообщаете компилятору, что, когда он оценивает выражения внутри функции, он возвращает то, что вы определяете для [типа возврата].

В вашей функции вы говорите компилятору, ожидая int, а затем вы передаете ему sf :: Packet.

Если вы хотите вернуть класс, то вам необходимо установить этот класс в качестве типа возвращаемого значения для функции:

sf::Packet LoginPacket::getPayload() { 
     return payload; 
    } 

Теперь это будет посылать копию полезной нагрузки, так Нил показал , если вы хотите вернуть ссылку на пакет (так что мы можем использовать тот же самый пакет без надобности копировать его), то вы хотели бы использовать свою функцию:

sf::Packet& LoginPacket::getPayload() { 
     return payload; 
    } 

Если вы хотите вернуть член sf :: Packet, вам нужно будет установить тип возврата для этого элемента, а затем вернуть полезную нагрузку .member;

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