C++ 为什么你不能给我一个错误的整数?
当我在EclipseCDT中构建和运行此代码时,我希望它打印C++ 为什么你不能给我一个错误的整数?,c++,C++,当我在EclipseCDT中构建和运行此代码时,我希望它打印1。而是打印-1992206527。为什么会这样 这是我的密码 A.h A.cpp B.cpp main.cpp 要使其打印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();
1
。而是打印-1992206527
。为什么会这样
这是我的密码
A.h
A.cpp
B.cpp
main.cpp
要使其打印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
中,您尚未初始化B::obj
。。。。你为什么想让它成为一个指针?@juanchopanza我该怎么做?谢谢,为了简单起见,我想我会坚持在B.h
中包含a.h
#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();
}
#include "A.h"
#include "B.h"
B::B() : obj(new A) {}
B::~B() { delete obj;}
int B::run(){
obj->printNum();
return 0;
}