无效从“复杂*”转换为“测试*”[-fpermissive]

时间:2016-03-29 19:08:08

标签: c++ class

我有这个我想要测试的代码,但出于某种原因我得到了上面的错误:

#include <iostream>
using namespace std;
class Complex
{
    private:
       int real;
       int imag;
    public:
       Complex(): real(0), imag(0) { }
       void Read()
        {
           cout<<"Enter real and imaginary number respectively:"<<endl;
           cin>>real>>imag;
        }
        Complex* Add(Complex* comp2)
        {
            Complex* temp;
            temp->real=real+comp2->real;
/* Here, real represents the real data of object c1 because this function is called using code c1.Add(c2) */
            temp->imag=imag+comp2->imag;
/* Here, imag represents the imag data of object c1 because this function is called using code c1.Add(c2) */
            return temp;
        }
        void Display()
        {
            cout<<"Sum="<<real<<"+"<<imag<<"i";
        }
};

class Test: public Complex
{
public:

    Test() {};
    ~Test()
    {
        cout << "\nObject destroyed\n";   
    };
};


int main()
{
    //Complex c1,c2;
    Complex* c1 = new Complex();
    Complex* c2 = new Complex();
    //Test c3;
    Test* c3  = new Test();
    c1->Read();
    c2->Read();
    //c3.Read();
    c3=c1->Add(c2);
    c3->Display();
    return 0;
}

有人可以帮我解决这个错误吗?它来自哪里?

注意:我正在对可以使用基类中的方法和对象的派生类进行一些测试。 我想创建一个测试类型的对象,它可以使用2个复杂类型的对象,这些对象是通过基类的显示方法添加然后显示的(希望它有意义)。

1 个答案:

答案 0 :(得分:3)

在这一行c3 = c1->Add(c2);中,您尝试将Complex*(基类)分配给c3Test* - 派生类),这是非法的。您不能将基类分配给派生类,但另一种方法是合法的。