直接使用函数返回值作为c ++中的引用

时间:2012-10-31 17:49:04

标签: c++ pointers reference

最近我必须使用C ++进行大学课程。我知道指针和引用的概念,但我在某个特定点上羞辱。

考虑以下类定义:

class test{
    public:
        test(int i);
        ~test();
        int* getint();
    private:
        int *asdf;
};

test::test(int i){
     asdf = new int();
    *asdf = i;
}

int* test::getint(){
    return asdf;
}

和以下代码:

void fun1(int*& i){
    *i +=1;
}

int main(){
    test *a = new test(1);
    fun1(a->getint());
}

如果我用g ++编译它,我会收到一条错误消息:

error: invalid initialization of non-const reference of type ‘int*&’ from an rvalue of type ‘int*’

我看到问题出在哪里,并且可以通过声明一个像这样的新指针来解决它:

int main(){
    test *a = new test(1);
    int* b = a->getint();
    fun1(b);
}

但有没有其他方法可以直接使用返回值作为参考? 如果我的C ++代码很糟糕,欢迎你来解决它(这基本上是我在C ++的第一周)。

编辑:更改了fun1以使用引用并更正了类变量的启动(如enrico.bacis所建议的

2 个答案:

答案 0 :(得分:3)

您正在类测试的构造函数中定义一个新的asdf变量,该变量会影响实例变量。

更改行:

int* asdf = new int();

使用:

asdf = new int();

答案 1 :(得分:1)

有几个问题,因为在C ++中你必须正确管理内存,不能一直调用new而不需要在以后进行删除。

我想这个

void fun1(int* i)
{
  *i +=1;
} 

会给+ = 1一个比*更高的运算符优先级,所以你需要这样做:

void fun1(int* i)
{
  (*i) +=1;
} 

请注意,该函数需要将int*作为参数而不是int *&。如果要修改指针本身而不是指向指针,则只需要int *&。在这种情况下,您无法传递getint()的返回值,这似乎会给您带来编译错误。