0

我在函数返回语句中收到错误。如果函数声明是,我很难理解我将返回什么:

const vector<Message*>& getMessages(string messageBox) const;

我有类 Message、Box 和 MessageBox:

class Box
{
public:
    vector <Message> *messages;
    string name;
public:
    Box();
       ~Box();
};

class MessageBox
{
public:
    MessageBox(); 
    ~MessageBox(); 
        const vector<Message>& getMessages(string messageBox) const;
private:
    Box *inbox;
};

现在我正在尝试实现函数getMessages。我尝试返回 Box *inbox 的向量 *messages。看起来像:

 const vector<Message>& MessageBox::getMessages(string messageBox) const
{
   if(messageBox == "inbox")
     return (const_cast  <vector<Message>&>(inbox->messages));
}

这给了我前面提到的错误。也许,我应该改变我的变量。
有任何想法吗?谢谢你。

4

2 回答 2

0

这是你的问题。的类型inbox->messagesconst std::vector<Messages> *。如果要返回对 指向的值的引用inbox->messages,只需引用指针:

return *inbox->messages;

根本不需要const_cast,因为源类型和目标类型都已经是cosnt.

话虽如此,您的代码不必要地使用了大量的指针。为什么是inbox指针?为什么不只是一个价值成员?为什么是messages指向 astd::vector而不是一个值的指针?

于 2012-05-27T11:03:30.420 回答
0

您的退货线路应该是

return *inbox->messages;

请注意,如果messageBox != "inbox". 这将有些棘手,因为您不能合法地仅返回对临时本地的引用。

您的getMessages函数可能会更好地返回std::vector<Message>*,因为这就是它在类中的保存方式,并且它会让代码用户更清楚地知道他们在访问指针时应该采取通常的预防措施(即检查nullptr)。

更好的是完全摆脱原始指针的使用。赞成std::shared_ptrmessages因为它在Box和任何呼叫之间共享,如果它不共享,则getMessages赞成。unique_ptrBox

您可能并不真的需要这两个都是指针,因此根本不使用指针会更简单。除非您期望 的大小messages很大和/或被getMessages非常频繁地调用,否则只返回一个messages.

于 2012-05-27T11:04:47.080 回答