为什么cout给我错误的整数?

时间:2016-02-20 20:33:26

标签: c++

当我在Eclipse CDT中构建并运行此代码时,我希望它能够打印1。它会打印-1992206527。这是为什么?

这是我的代码。

A.H

#ifndef A_H
#define A_H

class A {
private:
    int a;
public:
    A();
    ~A();

    void printNum();
};

#endif

A.cpp

#include <iostream>
#include "A.h"

A::A() :
    a(1)
{

}

A::~A(){}

void A::printNum(){
    std::cout << a << std::endl;
}

B.h

#ifndef B_H_
#define B_H_

class A;

class B {
private:
    A*  obj;
public:
    B();
    ~B();

    int run();
};

#endif

B.cpp

#include "A.h"
#include "B.h"

B::B() {}

B::~B() {}

int B::run(){
    obj->printNum();
    return 0;
}

的main.cpp

#include "B.h"

int main(int argc, char **argv) {
    B b;
    return b.run();
}

1 个答案:

答案 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}}。