C++ c2797未实现成员初始值设定项列表内的列表初始化或非静态数据成员初始值设定项

C++ c2797未实现成员初始值设定项列表内的列表初始化或非静态数据成员初始值设定项,c++,visual-studio,c++11,initializer-list,C++,Visual Studio,C++11,Initializer List,当我尝试编译我的项目时,在visual studio 2013中出现以下错误 c2797:未实现成员初始值设定项列表或非静态数据成员初始值设定项中的列表初始化 下面是它抛出上述编译器错误的代码段 ==sample.h==== enum class Process { TUNNEL_IP_VERSION, // Tunnel::IPVersion::Type PADDING_BYTE, IP_ADDRESS_FIT_ACTUAL_SIZE, IP_ADDRESS_FIT_IP

当我尝试编译我的项目时,在visual studio 2013中出现以下错误

c2797:未实现成员初始值设定项列表或非静态数据成员初始值设定项中的列表初始化

下面是它抛出上述编译器错误的代码段

==sample.h====

enum class Process
{


  TUNNEL_IP_VERSION,  // Tunnel::IPVersion::Type
  PADDING_BYTE,
  IP_ADDRESS_FIT_ACTUAL_SIZE,
  IP_ADDRESS_FIT_IPv6_SIZE,
  PORT_NUMBER,
};

using ProcessingOrder = std::vector<Process>;

const ProcessingOrder m_ProcessingOrder =
{


  Process::TUNNEL_IP_VERSION,
  Process::PADDING_BYTE,
  Process::IP_ADDRESS_FIT_IPv6_SIZE,
  Process::PORT_NUMBER
};
在哪里,, m_属性是,

struct{
         SSL_CTX* const m_pContext;
         Socket* m_pSocket;
         X509* m_pCertificate;
         }m_Attribute;
SSL_CTX_new,是SSL中的标准定义。have
g_sslcheice是

g_SSLChoice[CloudSSL::TLSv1_2 + 1] =
  {
    /* [SSLv23] = */ {&SSLv3_client_method, 0},
    /* [SSLv3] = */ {&SSLv23_client_method, SSL_OP_NO_SSLv2},
    /* [TLSv1] = */ {&TLSv1_client_method, SSL_OP_NO_SSLv3},
    /* [TLSv1_1] = */ {&TLSv1_1_client_method, SSL_OP_NO_TLSv1},
    /* [TLSv1_2] = */ {&TLSv1_2_client_method, SSL_OP_NO_TLSv1_1}
  };
其中,

class CloudSSL : public Util::Thread { public: enum Version { // SSLv2, // Not supported SSLv23, SSLv3, TLSv1, TLSv1_1, TLSv1_2 }; 类CloudSSL:public Util::Thread { 公共:枚举版本 { //SSLv2,//不受支持 SSLv23, SSLv3, TLSv1, TLSv1_1, TLSv1_2 }; 最后一种方法是,
const SSL_METHOD*(*m_pfSSLMethod)(;

Visual Studio尚未实现此功能。可以找到解决方法

你可以用

const ProcessingOrder m_ProcessingOrder = ProcessingOrder
{
  Process::TUNNEL_IP_VERSION,
  Process::PADDING_BYTE,
  Process::IP_ADDRESS_FIT_IPv6_SIZE,
  Process::PORT_NUMBER
};
你的第二个案子

struct Attribute_t{
         SSL_CTX* const m_pContext;
         Socket* m_pSocket;
         X509* m_pCertificate;
         }m_Attribute;
那就

m_Attribute = Attribute_t{SSL_CTX_new(g_SSLChoice[version].m_pfSSLMethod()),
0, 0}

Visual Studio尚未实现此功能。可以找到解决方法

你可以用

const ProcessingOrder m_ProcessingOrder = ProcessingOrder
{
  Process::TUNNEL_IP_VERSION,
  Process::PADDING_BYTE,
  Process::IP_ADDRESS_FIT_IPv6_SIZE,
  Process::PORT_NUMBER
};
你的第二个案子

struct Attribute_t{
         SSL_CTX* const m_pContext;
         Socket* m_pSocket;
         X509* m_pCertificate;
         }m_Attribute;
那就

m_Attribute = Attribute_t{SSL_CTX_new(g_SSLChoice[version].m_pfSSLMethod()),
0, 0}

那么?错误是说,此功能未在您的visual studio版本中实现。关于您的问题是什么?尽管VS2013支持c++11功能-初始化列表,为什么会出现上述错误?如何解决此问题?此功能在VS2013的第一个版本中实现,但由于存在错误,自更新3以来已被删除在其实现中。可能重复的So?错误表示,此功能未在您的visual studio版本中实现。关于您的问题是什么?尽管VS2013支持c++11功能-初始化列表,为什么会出现上述错误!?如何解决此问题?此功能已在VS2013的第一个版本中实现,but自更新3以来被删除,因为它的实现中存在错误。可能重复的我在问题本身中添加了一个类似的情况。您的帮助将不胜感激。!Thanks@ShivarajBhat若您还想在类中使用列表初始化,那个么您的结构不应该是匿名的、命名的,并且使用与ProcessingOr相同的技术主席先生,正如您前面所说,我尝试过这样做,但它是整个语句中的参数之一,在第二个场景中使用您的解决方案会导致预期错误(或{处于“=”位置。整个语句如下所示:CloudSSL::CloudSSL(Tunnel::Manager*const pTunnelManager,const Version):Util::Thread(pTunnelManager->getm_ThreadManager()),m_pTunnelManager(pTunnelManager),m_Attribute=Attribute_t{SSL_CTX_new(g_SSLChoice[version].m_pfSSLMethod()),0,0}{@ShivarajBhat它不是类初始值设定项,它是初始值设定项列表中的初始值设定项。我不知道你的问题是什么。我在问题本身中又添加了一个类似的情况。非常感谢你的帮助。!Thanks@ShivarajBhat若您还想在类中使用列表初始化,那个么您的结构不应该是匿名的,命名它,并使用sam主席先生,正如您前面所说,我尝试了这个方法,但它是整个语句中的参数之一,在第二个场景中使用您的解决方案,导致出现预期错误(或{在“=”位置)。整个语句是这样的:CloudSSL::CloudSSL(Tunnel::Manager*const pTunnelManager,const Version):Util::Thread(pTunnelManager->getm_ThreadManager()),m_pTunnelManager(pTunnelManager),m_Attribute=Attribute_t{SSL_CTX_new(g_SSLChoice[Version].m_pfSSLMethod()),0,0}{@ShivarajBhat它不在类初始值设定项中,它是初始值设定项列表中的初始值设定项。我不知道,你的问题是什么。