c ++如何通过引用返回向量?

时间:2014-04-23 01:21:49

标签: c++ pointers vector reference header-files

我是一名c ++学生,可以帮助理解并完成我的任务。

我有SalesItem个对象的向量:

class Invoice
{
public:
    //blabla
    vector<SalesItem> *getSalesItems(); //code provided by the assignment.
private:
{
    //blabla
    vector<SalesItem> salesItems;
};

我需要将该矢量作为参考返回:

void Invoice::getSalesItems() //error on this line. Code provided by assignment.
{
    return salesItems; //error on this line.
}

现在,我知道给我错误的东西显然是错误的,我甚至没有任何指针或参考。我发布这几行代码只是作为我希望看到的一个例子(或者更现实地说,对我来说是有意义的。)

我想要一个get函数,就像int或string这样的类型的其他get函数一样,除了这个函数必须通过引用返回(根据赋值的要求。)

不幸的是,我对矢量和引用的理解不符合这个问题的优点,而且我没有任何可以帮助我的教育资源。如果有人能帮我理解该怎么做,我将不胜感激。

很乐意提供任何额外信息。

2 个答案:

答案 0 :(得分:9)

您需要指定返回类型。此外,最好同时提供constnon-const版本。代码如下:

class Invoice
{
public:
          vector<SalesItem> &getSalesItems()       { return salesItems; }
    const vector<SalesItem> &getSalesItems() const { return salesItems; }
private:
    vector<SalesItem> salesItems;
};

样本用法:

Invoice invoice;
vector<SalesItem> &saleItems = invoice.getSalesItems(); // call the first (non-const) version
const Invoice &const_invoice = invoice;
const vector<SalesItem> &saleItems = const_invoice.getSalesItems(); // call the second (const) version

答案 1 :(得分:8)

您正在函数实现中返回void。并且您也没有正确的声明来通过引用返回。

代码应该是这样的:

部首:

class Invoice
{
public:
    vector<SalesItem> &getSalesItems();
private:
    vector<SalesItem> salesItems;
};

实现:

vector<SalesItem> &Invoice::getSalesItems() {
    return salesItems;
}