我刚刚进入C ++并对以下主题进行了一些讨论:
我有一个带有3个double值的Class,我将对象“supportRefl [4]”创建为数组。
我现在想要在“Scattering”类的函数“position”中返回数组,但我找不到相应的方法。
如果你能告诉我怎么做,我们将不胜感激。
继承班级:
class Quelle
{
private:
double distanceq;
double elevationq;
double azimuthq;
public:
void SetValue(double distance, double elevation, double azimuth);
double Getd(){return distanceq;}
double Gete(){return elevationq;}
double Geta(){return azimuthq;}
Quelle(double distance=0, double elevation=0, double azimuth=0);
//constructor
~Quelle(); //destructor
};
void Quelle::SetValue(double distance, double elevation, double
azimuth)
{
distanceq = distance;
elevationq = elevation;
azimuthq = azimuth;
}
Quelle::Quelle(double distance, double elevation, double azimuth)
//constructor
{
}
Quelle::~Quelle() // destructor
{
}
这里的函数我想将数组返回: 我红了,你有一个指向数组第一个地址的指针,但它根本不起作用。
*double Scattering::position(const double &distance, const double &elevation, const double &azimuth, const double &intensity)
{
double intensity_position = intensity * 10 * 5;
m[0] = distance;
m[1] = elevation;
m[2] = azimuth;
double lo[3] = {m[0], m[1]+intensity_position, m[2]-intensity_position}; //zusammenfassen
double ro[3] = {m[0], m[1]+intensity_position, m[2]+intensity_position};
double lu[3] = {m[0], m[1]-intensity_position, m[2]-intensity_position};
double ru[3] = {m[0], m[1]-intensity_position, m[2]+intensity_position};
//create instances
Quelle upperLeft(0,0,0);
Quelle upperRight(0,0,0);
Quelle lowerLeft(0,0,0);
Quelle lowerRight(0,0,0);
const int NUMBER = 4;
Quelle supportRefl[NUMBER];
supportRefl[0].SetValue(lo[0],lo[1],lo[2]);
supportRefl[1].SetValue(ro[0],ro[1],ro[2]);
supportRefl[2].SetValue(lu[0],lu[1],lu[2]);
supportRefl[3].SetValue(ru[0],ru[1],ru[2]);
return supportRefl[];
}
非常感谢你的帮助, 欢呼西蒙
答案 0 :(得分:1)
使用C ++不能按值返回原始数组。正如其他人所建议的那样,您可以使用std::array
这是一个简单包装原始数组的struct
。
例如:
typedef std::array<Quelle,4> QuelleX4;
QuelleX4 Scattering::position(const double &distance, const double &elevation, const double &azimuth, const double &intensity)
{
QuelleX4 supportRefl;
supportRefl[0].SetValue(lo[0],lo[1],lo[2]);
supportRefl[1].SetValue(ro[0],ro[1],ro[2]);
supportRefl[2].SetValue(lu[0],lu[1],lu[2]);
supportRefl[3].SetValue(ru[0],ru[1],ru[2]);
return supportRefl;
}
或者,定义您自己的struct
或使用std::vector
,但这会在堆上分配,因此需要付出代价。
答案 1 :(得分:0)
问题是你正在尝试返回一个在堆栈上分配的数组,当函数结束时,这个数组被删除,所以你要么必须在堆上创建这个数组
supportRefl = new Quelle[NUMBER]
并且记得稍后删除它,这是一个不好的做法,所以你可以用像unique_ptr或shared_ptr这样的智能指针替换指针
std::unique_ptr<Quelle[]> supportRefl = make_unique<Quelle[]>(NUMBER)
或在某处创建一个数组并将其作为参数传递给函数。
*double Scattering::position(const double &distance, const double
&elevation, const double &azimuth, const double &intensity, Quelle * arrayToFill)
或者你可以返回std :: vector或std :: array
最简单的选项可能是std :: vector和std :: array。
答案 2 :(得分:0)
ID data1 data2 ... copyID
15 a b NULL
16 c d 11
17 a b 15
18 c d 16
这可能是一个静态类方法。