c++ 为什么“return &variable”无效?

egdjgwm8  于 2023-10-21  发布在  其他
关注(0)|答案(1)|浏览(156)

我遇到了一些编译器问题,一个类变量和一个方法访问它的内存位置。我需要能够返回类变量的地址,我需要其他类能够读取该地址。

class A

public:  
    bool& getFlag();

private:
    bool flag;

inline bool& A::getFlag()
{
    return &flag;
}

我希望这就足够了,但我收到以下错误:

invalid initialization of non-const reference of type ‘bool&’ from an rvalue of type ‘bool*’
   return &flag;

我不明白为什么它的阅读一个布尔 *,甚至作为一个右值,从我写的到目前为止。我对c++相当陌生,所以如果这是一个基本的问题,请理解。
到目前为止,我看到了两种可能的解决方案。第一,定义一个变量来保存get函数中的地址,并返回该变量,我认为这不会起作用,因为该变量是临时的,我特别需要返回bool&,而不是const bool&。另一个,定义另一个类变量来保存地址,并使用get函数返回这个新变量。我相信这是可行的,但感觉有点笨拙,我想知道是否有更好的方法,或者我在当前的实现中是否犯了一些错误,否则它会工作。

xoefb8l8

xoefb8l81#

你遇到的错误是因为你试图在getFlag方法中返回一个指向bool(即bool*)的指针作为对bool(即bool&)的引用,这是不允许的。错误消息表明您正在尝试使用右值(临时)指针初始化非常量引用。
如果你想返回一个对flag成员变量的引用,你应该这样做:

class A {
public:  
    bool* getFlag(); // Return a pointer to the bool.

private:
    bool flag;
};

inline bool* A::getFlag() {
    return &flag; // Return a pointer to the member variable.
}

相关问题