2015-11-16 1 views
-1

Je suis en train de mettre à jour mon projet GDI + vers Direct2D. Quand je réécris mon GDI + classe à Direct2D Je suis message d'erreur lors de la compilation: erreur C2512: 'D2D1 :: ColorF': pas de constructeur par défaut approprié disponibleQuelle est la cause de: erreur C2512: 'D2D1 :: ColorF': aucun constructeur par défaut approprié disponible

Le fichier d'en-tête:

#pragma once 
#include "stdafx.h" 
#include <chrono> 
#include <atomic> 
#include "d2d1.h" 
#pragma comment (lib, "d2d1.lib") 

template <class T> void SafeRelease(T **ppT) 
{ 
if (*ppT) 
{ 
(*ppT)->Release(); 
*ppT = NULL; 
} 
} 

class Direct3D_Draw 
{ 
HWND mhWnd{}; 
HDC mHDC{}; 
PAINTSTRUCT mPS; 
HBITMAP bmp{}; 
HGDIOBJ oldBmp{}; 

D2D1::ColorF frontcolor; 
D2D1::ColorF backcolor; 
D2D1::ColorF fontcolor; 
D2D1::ColorF fontbackcolor; 

public: 
Direct3D_Draw(const HWND& hWnd, D2D1::ColorF _backcolor = D2D1::ColorF::White, D2D1::ColorF _frontcolor = D2D1::ColorF::Black); 
~Direct3D_Draw(); 
}; 

L'implémentation:

#include "stdafx.h" 
#include "Direct3D_Draw.h" 
#include <random> 
#include <iterator> 
#include <chrono> //clock_t 
//#include <Dwrite.h> 
//#pragma comment (lib, "Dwrite.lib") 

Direct3D_Draw::Direct3D_Draw(const HWND& hWnd, D2D1::ColorF ibackcolor, D2D1::ColorF ifrontcolor) 
{ 

} 

Direct3D_Draw::~Direct3D_Draw() 
{ 
} 

Ce n'est pas un code complet, juste une reproduction simplifiée. Visual Studio 2013 SP5 Quel est le problème? ..

Ici l'écran IDE highkight in IDE

+1

Essayez de construire les couleurs de membre dans une liste d'initialisation dans le constructeur de 'Direct3D_Draw'. Ils ne fournissent pas de constructeur par défaut et requièrent des valeurs lorsque votre classe 'Direct3D_Draw' est construite. –

+0

'Qu'est-ce qui ne va pas? 'L'erreur ne vous dit-elle pas ce qui ne va pas? Évidemment, vous ne pouvez pas créer d'objets 'D2D1 :: ColorRef' sans arguments car ce constructeur n'est pas disponible. – PaulMcKenzie

Répondre

1

Tout membre de la classe qui n'est pas explicitement initialisé dans la liste d'initialisation de la classe contenant sera initialisé par la valeur par défaut vide (()) dans tous les cas.

Mais ColorF ne fournit pas un défaut constructeur vide, tel que documenté here, alors quand le Direct3D_Draw::Direct3D_Draw() veut ajouter le cache

frontcolor = D2D1::ColorF(); 
... 

il ne trouve pas un constructeur par défaut pour eux, vous devez initialiser explicitement les dans le constructeur, par exemple:

Direct3D_Draw::Direct3D_Draw(....) : frontcolor{0.0f,0.0f,0.0f,0.0f}, ... 
+0

Merci! BMPD2DGenerator :: BMPD2DGenerator (const HWND et hWnd, D2D1 :: ColorF _backcolor, D2D1 :: ColorF _frontcolor): frontcolor (_frontcolor), police de caractère (_frontcolor), backcolor (_backcolor), fontbackcolor (_backcolor) {..... . –