对不起,标题模糊,我似乎缺少了一些东西。
我不愿发布此消息,因为它看起来是如此基础,但我无法使其正常工作。我的IDE告诉我以下错误。我有一个叫做IRatio的类,我想与长双倍互换。
class
IRatio
{
protected:
long double
mValue;
public:
IRatio();
IRatio(
const IRatio& ir);
IRatio(
const long double& ld);
IRatio&
operator=(
const IRatio& ir);
IRatio&
operator=(
const long double& ld);
operator long double() const;
};
现在我知道以下几行有效:
IRatio n1(0.01f);
IRatio n2;
n2 = 0.02f;
但是,令我惊讶的是,此行不起作用:
IRatio n3 = 0.03f;
我该如何工作?我假设在这种情况下调用了复制构造函数?或者即使是赋值运算符,我也不介意!我知道std :: string可以做到。
std::string s = "hello!";
谢谢
最佳答案
您的代码应按原样工作。就是说,IRatio
不会自行管理任何资源,因此您不需要复制构造函数和赋值运算符。应该这样做:
struct IRatio {
IRatio() : d(0L) { }
IRatio(long double d) : d(d) { }
operator long double() const { return d; }
private:
long double d;
};
int main(int argc, char* argv[])
{
IRatio r = 0.02f;
return 0;
}