Pregunta

Quiero burlarse de un método con el A::B X(void) declaración. La definición es algo como sigue.

class A {
    class B;
    virtual B X() = 0;
};

class A::B {
  public:
    auto_ptr<int> something;
};

Mi clase simulada, después de esto, es bastante estándar.

class mA : public A
{
  public:
    MOCK_METHOD0(X, A::B());
};

Compilado, sin embargo, esto me da este error raro, y no he sido capaz de seguir hacia abajo. Lo que está mal con esto?

In member function ‘virtual A::B mA::X()’:
...: error: no matching function for call to ‘A::B::B(A::B)’
...: note: candidates are: A::B::B()
...:                       A::B::B(A::B&)

Actualizar He encontrado un ejemplo de código no demostrar esto.

#include <gmock/gmock.h>
#include <memory>
using std::auto_ptr;

class thing {
  public:
    class result;
    virtual result accessor () = 0;
};

class thing::result {
    auto_ptr<int> x;   // If this just "int", error goes away.
};

namespace mock {
    class thing : ::thing {
      public:
        MOCK_METHOD0 ( accessor, result() );
    };
}
¿Fue útil?

Solución

Es difícil de decir, sin las definiciones de sonidos A y B como se está tratando de construir una casa de un temporal y no porque no se puede unir el temporal a una referencia no const.

Por ejemplo, el constructor de copia se puede definir como:

class A {
 public:
  class B {
   public:
    // This should be const, without good reason to make it otherwise.
    B(B&); 
  };
};

Con la corrección simplemente lo que es una referencia constante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top