当我在Eclipse CDT中构建并运行此代码时,我希望它能够打印1
。它会打印-1992206527
。这是为什么?
这是我的代码。
#ifndef A_H
#define A_H
class A {
private:
int a;
public:
A();
~A();
void printNum();
};
#endif
#include <iostream>
#include "A.h"
A::A() :
a(1)
{
}
A::~A(){}
void A::printNum(){
std::cout << a << std::endl;
}
#ifndef B_H_
#define B_H_
class A;
class B {
private:
A* obj;
public:
B();
~B();
int run();
};
#endif
#include "A.h"
#include "B.h"
B::B() {}
B::~B() {}
int B::run(){
obj->printNum();
return 0;
}
#include "B.h"
int main(int argc, char **argv) {
B b;
return b.run();
}
答案 0 :(得分:1)
要使其打印1,您必须初始化B :: obj。下面是一个B.cpp,obj正确初始化/解除分配。
#include "A.h"
#include "B.h"
B::B() : obj(new A) {}
B::~B() { delete obj;}
int B::run(){
obj->printNum();
return 0;
}
或者,您可以使obj成为对象类型A(即将obj声明为A obj;
),而不是使其成为指向类型A的对象的指针。这将需要在A.h
中包含B.h
{1}}。