分享
三行代码  ›  专栏  ›  技术社区  ›  Iqmal

将一个用户定义的类转换为另一个用户定义的类时出现问题

c++
  •  -3
  • Iqmal  · 技术社区  · 1 周前

    我刚刚介绍了C++ OOP。
    并为每个类定义了转换构造函数。
    我没有问题转换 浮动 整数 ,如下所示。
    真实的 问题 当我 从…转换 .

    #include <iostream>
    using namespace std;
    
    class Float
    {
        float x, y;
    public:
        Float() : x(0),y(0) {}
        Float(float a, float b) : x(a),y(b) {}
    //  Float(const Integer&);
        float getX() const { return this->x; }
        float getY() const { return this->y; }
        float summa()
        {
            return this->x + this->y;
        }
    };
    
    class Integer
    {
        int v, w;
    public:
        Integer() : v(0),w(0) {}
        Integer(int a, int b) : v(a),w(b) {}
        Integer(const Float&);
        int getV() const { return this->v; }
        int getW() const { return this->w; }
        int summa()
        {
            return this->v + this->w;
        }
    };
    
    int main()
    {
    //  Integer i(5, 2);
    //  Float f = i;
        Float F(3.23, 5.78);
        Integer I = F;
    //  cout << f.summa();
        cout << I.summa();
        return 0;
    }
    /*
    Float::Float(const Integer& i)
    {
        this->x = (float)(i.getV());
        this->y = (float)(i.getW());
    }
    */
    Integer::Integer(const Float& f)
    {
        this->v = (int)(f.getX());
        this->w = (int)(f.getY());
    }
    
    1 回复  |  直到 1 周前
        1
  •  0
  •   GaryNLOL    1 周前

    什么时候? Float(const Integer&); 声明 Integer 类尚未声明。

    这应该可以满足您的需要:

    #include <iostream>
    using namespace std;
    
    class Integer;
    
    class Float
    {
        float x, y;
    public:
        Float() : x(0),y(0) {}
        Float(float a, float b) : x(a),y(b) {}
        Float(const Integer&);
        float getX() const { return this->x; }
        float getY() const { return this->y; }
        float summa()
        {
            return this->x + this->y;
        }
    };
    
    class Integer
    {
        int v, w;
    public:
        Integer() : v(0),w(0) {}
        Integer(int a, int b) : v(a),w(b) {}
        Integer(const Float&);
        int getV() const { return this->v; }
        int getW() const { return this->w; }
        int summa()
        {
            return this->v + this->w;
        }
    };
    
    int main()
    {
        Integer i(5, 2);
        Float f = i;
        Float F(3.23, 5.78);
        Integer I = F;
        cout << f.summa();
        cout << I.summa();
        return 0;
    }
    
    Float::Float(const Integer& i)
    {
        this->x = (float)(i.getV());
        this->y = (float)(i.getW());
    }
    
    Integer::Integer(const Float& f)
    {
        this->v = (int)(f.getX());
        this->w = (int)(f.getY());
    }