对不起,标题模糊,我似乎缺少了一些东西。

我不愿发布此消息,因为它看起来是如此基础,但我无法使其正常工作。我的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;
}

09-05 23:34