0

我正在使用SFML并且我想返回我认为是类的东西。所以我想获取有效载荷并返回它。上课时我该怎么做payload

sf::Packet payload;

我该如何退货?

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

我尝试的每一种方式都会出错。我必须使用指针吗?仅仅是因为有效载荷被识别为一个类并且编译器告诉我没有办法将它转换为一个类int吗?那么我该如何转换它或我该怎么做?

4

2 回答 2

3

你希望函数返回什么?如果你想让它返回一个 int,这个 int 是什么意思?它是您要检索的数据包中的字段吗?如果你想退回整个数据包,你可以这样做。

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

如果需要,函数的调用者可以编辑有效负载,或制作它的副本。您可以通过添加 const 使其只读

const sf::Packet& LoginPacket::getPayload() const
{
    return payload;
}
于 2013-08-29T23:44:26.757 回答
0

让我们看看c++中的函数声明是什么。

[返回类型] [函数名称](参数);

您是在告诉编译器,当它评估函数内部的表达式时,它将返回您为 [返回类型] 确定的内容。

在你的函数中,你告诉编译器期待一个 int,然后你给它一个 sf::Packet。

如果要返回一个类,则需要将该类设置为函数的返回类型:

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

现在,这将发送有效负载的副本,正如 Neil 所示,如果您想返回对数据包的引用(以便我们可以使用相同的数据包而无需不必要地复制它),那么您将需要使用他的函数:

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

如果要返回 sf::Packet 的成员,则需要将返回类型设置为该成员,然后执行 return payload.member;

于 2013-08-30T01:23:24.367 回答