我仍然是C ++的初学者,我应该在以下代码中找到错误。
512 + 2
据我所知,在第六行有一个错误:需要初始化参考f。但我对第七行感到困惑。它看起来像一个构造函数,但我无法确定p =& x;是正确的?另外,如果我想纠正参考初始化的错误,我该怎么办?
答案 0 :(得分:3)
要确定是否存在错误,最好的办法就是编译(1)。
如果你这样做,你会发现至少两个问题:
(1)根据此成绩单:
$ g++ -c -o prog.o prog.cpp
prog.cpp: In constructor ‘Thing::Thing(char, float)’:
prog.cpp:7:7: error: uninitialized reference member in ‘float&’ [-fpermissive]
Thing(char ch, float x) { c = ch; p = &x; f = x; }
^
prog.cpp:6:14: note: ‘float& Thing::f’ should be initialized
float& f;
^
prog.cpp:7:43: error: cannot convert ‘float*’ to ‘int*’ in assignment
Thing(char ch, float x) { c = ch; p = &x; f = x; }
^
答案 1 :(得分:0)
p = &x;
不对,因为p
的类型为int*
而&x
的类型为float*
。
f = x;
很可能不是你想要的。您可能希望f
成为x
的引用。上述行不会这样做。它将x
的值分配给f
引用的对象。
如果您希望f
成为x
的引用,则需要将其初始化为:
Thing(char ch, float& x) : f(x) { ... }
// ^^^ different from your signature
使用
Thing(char ch, float x) : f(x) { ... }
是有问题的,因为一旦函数返回,f
将成为悬空引用。