代码有什么错误?

时间:2015-10-19 01:02:05

标签: c++ class pointers reference

我仍然是C ++的初学者,我应该在以下代码中找到错误。

512 + 2

据我所知,在第六行有一个错误:需要初始化参考f。但我对第七行感到困惑。它看起来像一个构造函数,但我无法确定p =& x;是正确的?另外,如果我想纠正参考初始化的错误,我该怎么办?

2 个答案:

答案 0 :(得分:3)

要确定是否存在错误,最好的办法就是编译(1)

如果你这样做,你会发现至少两个问题:

  • 引用应该初始化;和
  • 你不能指定一个浮点指针和int指针。

(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将成为悬空引用。