原因是什么:错误 C2512:'D2D1::ColorF':没有合适的默认构造函数可用

What is the reason for: error C2512: 'D2D1::ColorF' : no appropriate default constructor available

我正在将我的 GDI+ 项目升级到 Direct2D。 当我将 GDI+ class 重写为 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 怎么了?..

这里是IDE的画面

任何未在包含 class 的初始化列表中显式初始化的 class 成员在任何情况下都将由默认的空 (()) 构造函数初始化。

但 ColorF 不提供默认的空构造函数,如文档所述here,所以当 Direct3D_Draw::Direct3D_Draw() 想要添加隐藏

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

它没有找到它们的默认构造函数,您应该在构造函数中显式初始化它们,例如:

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