2016-01-14 46 views
1

首先在這裏發帖很抱歉,如果事情是錯誤的。 我一直在關注C++ & directx11上的教程,我想出了一個在本教程中不復制的錯誤。示例代碼位於我創建的標題中。 在「private:」部分,所有3行代碼都會顯示錯誤「IntelliSense:數據成員初始化程序不允許」。需要幫助:「智能感知:數據成員初始值設定項是不允許的」

#pragma once 
#include "Window.h" 
#include <d3d11.h> 

class Renderer 
{ 
public: 
    Renderer(Window& window); 

private: 
    //Errors here 
    IDXGISwapChain* m_SwapChain = nullptr; 
    ID3D11Device* m_device = nullptr; 
    ID3D11DeviceContext* m_deviceContext = nullptr; 
} 
+2

有時候intellisense是錯誤的。它是否編譯? – NathanOliver

+0

如果我記得正確地使用這種方式默認初始化只允許C++ 11。你能告訴我們如何編譯你的代碼嗎? –

+0

這似乎是[C + +數據成員初始化不允許]的副本(http://stackoverflow.com/questions/10936009/c-data-member-initializer-is-not-allowed) –

回答

1

您無法在類定義中初始化數據成員。做正確的方法是在CPP文件:

IDXGISwapChain* Renderer::m_SwapChain = nullptr; 
ID3D11Device* Renderer::m_device = nullptr; 
ID3D11DeviceContext* Renderer::m_deviceContext = nullptr; 

你也可以做到這一點在你的構造函數,像這樣:

Renderer::Renderer(Window& window) : 
    m_SwapChain(nullptr), 
    m_device(nullptr), 
    m_deviceContext(nullptr) 
{ 
    // Initialization code here 
} 

我更喜歡後者。

+1

其實你可以在C++ 11及更高版本中使用:http://coliru.stacked-crooked.com/a/19087ed32a3c0bdd – NathanOliver

+0

但顯然不在OP所使用的編譯器中。 –

+3

也許,也許不是。有時intellisense會給出錯誤,但代碼仍會編譯。由於這篇文章只是用C++標記的,我們應該在提問時回答當前的標準。 – NathanOliver

相關問題