执行此操作的正确语法是什么?当然我犯了一些愚蠢的错误......不幸的是,我正试图更好地理解这些载体。我知道我创建了一个不必要的指针,但我需要理解语法。
#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*)'
答案 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;
}