vendredi 6 octobre 2017

c++ pointer assignment confusion

Consider this MCV example

class A
{
    class B
    {
    public:
        B();
       ~B();
    };
public:
    B* a, b, c;
    A();
    ~A();
    void foo();
};

A::foo()
{
    a = b = c;
}

yields the following compilation error in Visual Studio 2015

Severity Code Description Project File Line Suppression State Error C2679 binary '=': no operator found which takes a right-hand operand of type 'A::B *' (or there is no acceptable conversion)

Strangely if I declare a, b, and c as follows

B* a; B* b, B* c;

There is no compilation issue. Because the pointers are class type, am I required to provide an appropriate B operator=(B& poo) for the original declaration to work? Certainly I can do the following int x, y, z so why is the above generating a compiler error?

Aucun commentaire:

Enregistrer un commentaire