最近我必须使用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所建议的
答案 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()
的返回值,这似乎会给您带来编译错误。