我正在将我的GDI +项目升级到Direct2D。 当我将我的GDI +类重写为Direct2D时,我在编译期间收到以下错误消息: 错误C2512:' D2D1 :: ColorF' :没有合适的默认构造函数
标题文件:
#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();
};
实施:
#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()
{
}
这不是完整的代码,只是简化的复制。 Visual Studio 2013 sp5 有什么问题?..
答案 0 :(得分:1)
在任何情况下,默认的空(()
)构造函数都会初始化未在包含类的初始化程序列表中显式初始化的任何类成员。
但ColorF并没有提供默认的空构造函数,如here所示,所以当Direct3D_Draw::Direct3D_Draw()
想要添加隐藏的
frontcolor = D2D1::ColorF();
...
它没有找到它们的默认构造函数,你应该在构造函数中显式初始化它们,例如:
Direct3D_Draw::Direct3D_Draw(....) : frontcolor{0.0f,0.0f,0.0f,0.0f}, ...