-2

2 つの単純なクラスを定義しました。最初のクラス (A) には、int メンバー (i) を含む 2 番目のクラス (B) のオブジェクトへのポインター (b_ptr) が含まれます。最初のクラスのオブジェクトを作成しましたが、ポインターのオブジェクトに含まれる int を返そうとしています。

最初はコードをコンパイルすることさえできませんでしたが、その後、int A::returnInt()定義を移動して定義の後に配置しましたclass B。コンパイルできるようになりましたが、への呼び出しを出力すると、膨大な数 (実行するたびに変化します) が表示されreturnInt()ます。

どんな助けでも大歓迎です!

// HelloWorld.cpp : main project file.
#include "stdafx.h";

using namespace System;

#include <iostream>
#include <string>
#include <vector>

using namespace std;
using std::vector;
using std::cout;
using std::endl;
using std::string;

class B;

class A {

public:
    A() = default;
    B* b_ptr;

    int returnInt();

};

class B {

public:
    B() : i(1){};
    A a;

    int i;
};

int A::returnInt() { return (b_ptr->i); };

int main()
{
    A myClass;

    cout << myClass.returnInt() << endl;

}
4

1 に答える 1

2

次の方法で解決できます。

#include <iostream>
using namespace std;

struct B
{

    B() : i(1){}
    int i;
};

struct A
{
  A(B& b) : b_ptr(&b) {}

  int returnInt() { return b_ptr->i; }

private:

  A() = delete;

  B* b_ptr;
};

int main()
{
  B b;
  A myClass(b);

  cout << myClass.returnInt() << endl;

  return 0;
}
于 2014-08-04T01:07:33.263 に答える