如何解决将美元转换为美分和美分转换为美元
目标:
此代码的目的是将美元转换为美分,将美分转换为美元(反之亦然)。
问题:
此代码的问题在于美元和美分之间的转换只能是单向的。如果您删除 operator Dollars() const {return Dollars(m_cents / 100);}
行,代码可以正常工作,但只能以一种方式运行。
类的前向声明不起作用并返回 C2027“使用未定义的类型‘美元’”。 为什么在这种情况下类的前向声明不起作用?这似乎是一个循环依赖问题。
解决方案:
应该怎么做才能解决这个问题?
#include <iostream>
class Cents;//forward declare Cents for Dollar conversion
class Dollars;
class Cents
{
private:
int m_cents;
public:
Cents(int cents = 0)
: m_cents{ cents }
{
}
// Overloaded int cast
operator int() const { return m_cents; }
//int getCents() const { return m_cents; }
//void setCents(int cents) { m_cents = cents; }
//Convert Cents into Dollars. C2027 error.
operator Dollars() const
{
return Dollars(m_cents / 100);
}//myown
};
class Dollars
{
private:
int m_dollars;
public:
Dollars(int dollars = 0)
: m_dollars{ dollars }
{
}
// Overloaded int cast
operator int() const
{
return m_dollars;
}//myown
//int getDollars() const { return m_dollars; }//myown
//void setDollars(int dollars) { m_dollars = dollars; }//myown
// Allow us to convert Dollars into Cents
operator Cents() const
{
return Cents(m_dollars / 100);
} //This won't work because it hasn't seen class Cents
};
void printCents(Cents cents)
{
std::cout << cents << " cents"; // cents will be implicitly cast to an int here
}
void printDollars(Dollars dollars)
{
std::cout << dollars << " dollars";//myown
}
int main()
{
//Dollars dollars{ 9 };
//printCents(dollars); // dollars will be implicitly cast to a Cents here. You get 900 cents
Cents cents{ 2000 };//myown
printDollars(cents);//myown
std::cout << '\n';
return 0;
}
解决方法
这种问题可以通过将实现移动到 cpp 文件来解决。这样您就可以在没有循环依赖的情况下包含所需的标头:
美元.hpp
class AlbumSerializer(serializers.ModelSerializer):
class Meta:
fields = ['track_set',...]
在 Cents.hpp 中
operator Cents() const;
美元.cpp
operator Dollars() const;
在 Cents.cpp 中
#include Cents.hpp
Dollars::operator Cents() const
{
return Cents(m_dollars / 100);
}
编辑:
如果您想像示例一样将所有内容保存在单个文件中,只需用声明替换当前定义:
#include Dollars.hpp
Cents::operator Dollars() const
{
return Dollars(m_cents / 100);
}
并将实现移到类之外,例如在 main() 函数上方:
operator Cents() const;
operator Dollars() const;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。