2017-04-05 9 views
0

J'ai une fonction draw (SkCanvas * canvas).Skia SkCanvas ne peut pas être construit avec SkBitmap

En main() je vous écris:

SkBitmap myBitmap; 
myBitmap.allocN32Pixels(640, 480); 

SkCanvas *myCanvas(&myBitmap); 
draw(myCanvas); 

Mais Visual Studio génère cette erreur:

"a value of type "SkBitmap *" cannot be used to initialize an entity of type "SkCanvas*" 

Qu'est-ce que je fais mal?

Ma fonction draw() encombre le message et est complètement inutile pour cette question sinon je l'ai posté.

Ceci est la construction de SkCanvas.

/** Construct a canvas with the specified bitmap to draw into. 
     @param bitmap Specifies a bitmap for the canvas to draw into. Its 
         structure are copied to the canvas. 
    */ 
explicit SkCanvas(const SkBitmap& bitmap); 

Répondre

1
SkCanvas *myCanvas(&myBitmap); 

c'est un pointeur sur une toile. Les types de pointeurs SkCanvas* et SkBitmap* ne sont pas liés.

SkCanvas myCanvas(&myBitmap); 

ceci est une valeur de type myCanvas, initialisé avec un pointeur vers bitmap. Si SkCanvas a un ctor prenant un SkBitmap*, cela devrait fonctionner.

Ce n'est pas le cas. Il ne:

explicit SkCanvas(const SkBitmap& bitmap); 

si cela signifie:

SkCanvas myCanvas(myBitmap); 

Vous aurez probablement besoin aussi de changer l'appel de tirage à ceci:

draw(&myCanvas); 

en supposant que les travaux. En guise de supposition, vous avez également besoin d'un rappel sur la différence entre les pointeurs et les valeurs.

+0

Il a seulement résolu la moitié de mon problème. L'erreur "Le constructeur ne correspond pas" persiste toujours. – Aurlito

+0

@aurk vous avez également mal lu le constructeur de bitmap de toile. Fixé. – Yakk

+0

Cela a fonctionné. Merci. Besoin de vraiment lire les docs. – Aurlito