У меня есть код:Конструктор шаг
#include "stdafx.h"
#include "memory"
#include <gtest\gtest.h>
class Money
{
public:
explicit Money(int value) :value(value) {} ;
Money(Money&& m) :value(m.returnValue()) {};
Money(const Money &m) = default;
Money operator-(const Money &m) ;
Money &operator=(Money &&m) { return Money(m.returnValue()); };
Money &operator=(const Money &m)=default;
int returnValue() const { return value; };
~Money() = default;
private:
int value;
};
Money Money::operator-(const Money &m)
{
return Money(value - m.returnValue());
}
class Bank {
public:
Bank(Money m) :propertiesBank(std::make_unique<PropertiesBank>(std::move(m))) {};
int returnMoney() const { return propertiesBank->money->returnValue(); }
~Bank() = default;
private:
struct PropertiesBank;
std::unique_ptr<PropertiesBank> propertiesBank;
};
struct Bank::PropertiesBank
{
std::shared_ptr<Money> money;
PropertiesBank(Money&& m) :money(std::make_shared<Money>(m)) {};
};
int main()
{
Money k(1000);
Bank bank(k);
return 0;
}
Я хочу отображения (returnMoney)() деньги в банке, но я не могу. Я мог бы создать класс со структурой Impl и unique_ptr для обучения. Я знаю, что уникальный не может копировать. Как я могу сделать эту программу? Остальная часть моего кода хорошо?
Ошибка
C2027 Ошибка использование неопределенного типа Error 'Банк :: PropertiesBank'
C2039 'ReturnValue': не является членом 'STD :: unique_ptr>'
Когда вы говорите, что вы «не можете», что вы подразумеваете под этим? Вы получаете ошибки сборки? Ошибки во время выполнения или сбои? Неожиданные результаты? Пожалуйста, дополните! А также, пожалуйста, [читайте о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask). –
Поскольку вы хотите определить 'PropertiesBank' вне класса, вам также нужно определить функцию, которая использует ее вне класса: ее реализация должна быть после определения структуры. С этим изменением [ваш код компилируется] (http://rextester.com/UVFJ63318) –
А, создайте ошибки. Затем отредактируйте свой вопрос, чтобы включить * полный * и * полный * и * unedited * вывод компилятора. Просто скопируйте-вставьте вывод, когда вы встраиваете в тело вопроса, как текст. –