以下代码的输出为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的构造函数中初始化指针对象,尽管程序的行为没有改变。
我很确定我已采取所有措施为对象指针赋予一些值。如果我只使用非指针对象,我得到所需的输出,表明指针不指向有效的目标。出于某种原因,似乎在构造函数中为指针赋值不起作用,至少在这种情况下是这样。
我找不到我的错误,我希望你这样做。
答案 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);
那应该对你有帮助