2011-11-12 16 views
16

Tengo una clase que intento inicializar pero obtengo el error "Ningún constructor coincidente para la inicialización de 'TextureCoordinates'";C++ "Ningún constructor que hace juego para la inicialización del" error del compilador

clase, que estoy tratando de inicializar:

class TextureCoordinates 
{ 
public: 
    TextureCoordinates(){}; 
    TextureCoordinates(Point2D& origin, Dimensions2D& dim); 
    Point2D getOrigin() const {return origin;}; 
    Dimensions2D getDim() const {return dim;}; 
private: 
    Point2D origin; 
    Dimensions2D dim; 
}; 

línea con el error del compilador:

TextureCoordinates result(point, Dimensions2D(width, height)); 

Definición del constructor:

TextureCoordinates::TextureCoordinates(Point2D& origin, Dimensions2D& dim): 
origin(origin), dim(dim) {} 

Alguna idea de lo que estoy haciendo ¿incorrecto?

+0

¿Dónde está la definición del constructor? Todo lo que veo es la declaración. – Pubby

+0

Acabo de agregarlo. – Xavier

Respuesta

16

Su constructor toma los argumentos por referencia no constante, pero le pasa un objeto temporal (Dimensions2D(width, height)). Los temporarios, incluso los no const, no se unen a referencias no const.

solución, hacer de su constructor de tomar referencias const (que no debe modificar los objetos pasados ​​de todos modos):

TextureCoordinates(Point2D const& origin, Dimensions2D const& dim); 
4
TextureCoordinates result(point, Dimensions2D(width, height)) 

El segundo parámetro es un valor de lado derecho que no puede ser obligado a lValue referencia al constructor espera :

TextureCoordinates(Point2D& origin, Dimensions2D& dim); 

se puede arreglar cambiando la firma del constructor para

TextureCoordinates(Point2D& origin, const Dimensions2D& dim); 
TextureCoordinates(Point2D& origin, Dimensions2D&& dim); // alternative for c++11 

(si puede) o haciendo que el parámetro de una variable

Dimension2D dim=Dimensions2D(width, height); 
TextureCoordinates result(point, dim) 
-1

qué escribió la implementación de:

TextureCoordinates(Point2D& origin, Dimensions2D& dim); 
0

Declarar Dimensions2d exterior.

Dimension2d d(width, height); 
TextureCoordinates result(point, d); 
0

las variables temporales no se pueden pasar como una referencia en C++ porque entonces se puede cambiar el valor de un objeto temporal en la función que se va a desaparecer pronto !! No existe tal problema existe por referencia a las constantes ..... Por lo que su definición de la función debe ser como

TextureCoordinates(Point2D const& origin, Dimensions2D const& dim); 
Cuestiones relacionadas