C ++指针不是modyfying引用的对象

时间:2015-07-24 15:52:16

标签: c++ pointers object

以下代码的输出为0.

#include <iostream>    

class A{
  int index_;

  public:
  A( int index = 0 ) {
    this->set( index );
  }

  void set( index ) {
    index_ = index;
  }

  int get() {
    return index_;
  }
};    

class B{
  A object_, *object_ptr_;

  public:
  B( A object = A(2) ) {
    object_.set(3);
    object_ptr_ = &object_;
    varIndex( object );
  }

  void varIndex( A object ) {
    *object_ptr_ = object;
  }

  int varIndex() const {
    return *object_ptr_;
  }
};

int main( int argc, char* argv[] ) {
  B object;
  A integer(5);

  object.varIndex( integer );
  cout << object.varIndex().get();

  return 0;
}

此外,如果我改变

int varIndex() const {
  return object_;
}

int varIndex() const {
  return *object_ptr_;
}

发生崩溃。我也尝试在B的构造函数中初始化指针对象,尽管程序的行为没有改变。

我很确定我已采取所有措施为对象指针赋予一些值。如果我只使用非指针对象,我得到所需的输出,表明指针不指向有效的目标。出于某种原因,似乎在构造函数中为指针赋值不起作用,至少在这种情况下是这样。

我找不到我的错误,我希望你这样做。

1 个答案:

答案 0 :(得分:1)

您的代码看起来有点奇怪,但有很多错误。你有没有编译过它?

首先,当您为A类声明函数集时,必须指定类型:

void set (int index)
  {
    index_ = index;
  }

其次,在B类的构造函数中错过了分号。

第三,varIndex函数的返回值类型是A *而不是int:

  A* varIndex() const
  {
    return object_ptr_;         //return A* instead of int
  }

当你调用B类的varIndex方法时,你应该传递整数作为参数而不是A,因为A是一个类型。使用:

object.varIndex(integer);

那应该对你有帮助