将对象的向量返回给函数

时间:2017-04-17 23:44:47

标签: c++ function class vector

执行此操作的正确语法是什么?当然我犯了一些愚蠢的错误......不幸的是,我正试图更好地理解这些载体。我知道我创建了一个不必要的指针,但我需要理解语法。

#include <iostream>
#include <vector>

class otherClass
{
    public:
        otherClass(int x):value(x)
        {
            //ctor
        }
        int getValue()
        {
            return value;
        }
    private:
        int value;
};

class MyClass
{
    public:
        MyClass(int x)
        {
            obj = new std::vector<otherClass>(x,otherClass{5});
        }
        otherClass getVector()
        {
            return obj; //HERE FIRST ERROR <---------------
        }
    private:
        std::vector<otherClass>*obj;
};

void doSomething(otherClass*obj)
{
    std::cout << obj->getValue() << std::endl;
}

int main()
{
    MyClass*aClass = new MyClass(10);
    doSomething(aClass->getVector()); //HERE SECOND ERROR <---------------
    return 0;
}

编译时遇到的错误:

首先:

error: invalid conversion from 'std::vector<otherClass>*' to 'int' [-fpermissive]

第二

error: cannot convert 'otherClass' to 'otherClass*' for argument '1' to 'void doSomething(otherClass*)'

2 个答案:

答案 0 :(得分:1)

首先,这里使用任何指针都没有意义。无!

其次,你的getter应该是限定的const,并返回像vector这样的重对象的const引用。它可以防止无用的副本。

int getValue() const 
//             ^^^^^ 
{
    return value;
}

otherClass

之内
class MyClass
{
public:
    MyClass(int x) : obj(x, otherClass{5}) // construction here
    { }
    std::vector<otherClass> const & getVector() const
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^             ^^^^^
    {
        return obj;
    }
private:
    std::vector<otherClass> obj; // no pointer, just a vector
};

然后在主要:

MyClass aClass(10);

您想要对doSomething()做些什么不清楚。使用代码doSomething(aClass->getVector()),您应该处理otherClass es的返回向量。所以它应该是:

void doSomething(std::vector<otherClass> const & obj)

我让你写下它的代码。

答案 1 :(得分:0)

只说出你要归还的内容

std::vector<otherClass> *getVector()
{
    return obj;
}

std::vector<otherClass> getVector()
{
    return *obj;
}