#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でクラスを作ることができました。 私は知っている、ユニークなコピーすることはできません。 どうすればこのプログラムを作成できますか? 残りのコードは正常ですか?
未定義の型 '銀行:: PropertiesBank' エラー
C2039 'のreturnValue' のエラーC2027を使用
エラー:のメンバーではありません 'のstd :: unique_ptrを>'
あなたが「できない」と言うとき、それはどういう意味ですか?ビルドエラーが出ますか?実行時エラーまたはクラッシュ予想外の結果ですか?詳しく教えてください!また、[良い質問をする方法について](http://stackoverflow.com/help/how-to-ask)もお読みください。 –
あなたはクラスの外に 'PropertiesBank'を定義したいので、あなたも、クラスの外にそれを使用する関数を定義する必要があります。その実装は、構造体の定義の後にする必要があります。その変更で、[あなたのコードはコンパイル](http://rextester.com/UVFJ63318) –
ああ、ビルドのエラー。次に、質問を編集して、コンパイラの* full *と* complete *と* unedited *出力を含めます。質問本体にテキストとして作成すると、出力をコピーして貼り付けるだけです。 –