Проблемы с разыменованием указателя на член класса, который указывает на другой класс

Я определил два простых класса. Первый класс (A) содержит указатель (b_ptr) на объект второго класса (B), который содержит член int (i). Я создал объект первого класса и просто пытаюсь вернуть 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;

}

-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;
}
2

Другие решения


По вопросам рекламы [email protected]