我有一个代码:构造移动
#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()),钱存在银行里,但我不能。我可以使用struct Impl和unique_ptr来进行培训。 我知道,那独特的不能复制。 我该如何制作这个程序? 我的其他代码是否正常?
错误
错误C2027使用未定义类型 '银行:: PropertiesBank' 错误的
C2039 '的returnValue':不是 '的std ::的unique_ptr>'
当你说你“不能”时,你是什么意思?你有构建错误吗?运行时错误或崩溃?意外的结果?请详细说明!并请[请阅读如何提出良好问题](http://stackoverflow.com/help/how-to-ask)。 –
由于您想在类外定义'PropertiesBank',因此您需要定义将它用于类之外的函数:其实现必须位于结构定义之后。随着这种变化,[你的代码编译](http://rextester.com/UVFJ63318) –
啊,建立错误。然后编辑你的问题,包括编译器的* full *和* complete *和* unnedited *输出。在构建到问题主体时,只需将输出复制粘贴为文本即可。 –