如何返回对象数组的地址?

时间:2019-07-16 06:54:10

标签: c++

需要从函数返回对象数组的地址。 并在main中捕获对象数组的地址。并访问每个对象的数据主干。

#include <iostream>

void* getDetector();

class DETECTOR
{
public:

    int x;
    int y;

    DETECTOR();
    ~DETECTOR();
    void Detect();
};

DETECTOR* getDetector()
{
    // Need to return address of object array.
    return &DetectorObj;  
}

void DETECTOR::Detect()
{
    x = 100;
    y = 200;
}

DETECTOR::DETECTOR(){

    x=0;
    y=0;
}
DETECTOR::~DETECTOR(){}
DETECTOR Detector[3];
int main()
{
    // need catch here address of object array.

    DETECTOR * getDetectorPtr = getDetector(); 

    // need to access value of object array.
    // for e.g. 
    // getDetectorPtr[1]->Detect();
    // std::cout<<getDetectorPtr[1]->x;     
    // std::cout<<getDetectorPtr[1]->y;     

    return 0;
}

以上给出的代码用于返回单个对象的地址。但是需要从函数返回对象数组的地址。 并在main中捕获对象数组的地址。并在主目录中访问每个对象的数据。

1 个答案:

答案 0 :(得分:2)

你是这个意思吗?

DETECTOR* getDetector();

DETECTOR Detector[3];

DETECTOR* getDetector()
{
    return Detector;  
}

您的版本无法正常运行的原因可能是您对Detector数组的定义是之后,而在getDectector函数的定义之后,它必须是另一个

但是编写函数以返回全局数组的地址有什么意义呢?为什么不仅仅使用全局本身呢?

无论哪种情况,这都是错误的

getDetectorPtr[1]->Detect();

应该是

getDetectorPtr[1].Detect();

因为getDetectorPtr[1]不是Detector的指针(严格来说是对检测器的引用)。

就像我上面说的,为什么不只使用全局呢?

Detector[1].Detect();

我想这是您的真实错误,应该将->放在.中。换句话说,您对指针和数组感到困惑(非常常见的新手问题)。