【发布时间】:2017-01-05 00:18:40
【问题描述】:
我有一个代码:
#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 使用未定义类型 'Bank::PropertiesBank' 错误
C2039 'returnValue': 不是 'std::unique_ptr>' 的成员
【问题讨论】:
-
当你说你“不能”时,你是什么意思?你有构建错误吗?运行时错误或崩溃?出乎意料的结果?请详细说明!也请read about how to ask good questions.
-
既然你想在类外定义
PropertiesBank,你也需要在类外定义使用它的函数:它的实现必须在结构定义之后。随着这一变化,your code compiles -
啊,构建错误。然后编辑您的问题以包含编译器的 full 和 complete 和 unedited 输出。当您构建到问题正文中时,只需将输出复制粘贴为文本。