Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
(obsoleto) A inicialização da lista dentro da lista de inicializadores de membros ou do inicializador de membros de dados não estáticos não é implementada.
Observações
Este aviso está obsoleto no Visual Studio 2015. No Visual Studio 2013 e versões anteriores, o compilador do Microsoft C++ não implementa a inicialização de lista dentro de uma lista de inicializadores de membros ou de um inicializador de membros de dados não estáticos. Antes do Visual Studio 2013 Update 3, isso era convertido silenciosamente em uma chamada de função, o que poderia levar à geração de código incorreto. Visual Studio 2013 Atualização 3 relata isso como um erro.
Examples
Este exemplo gera C2797:
#include <vector>
struct S {
S() : v1{1} {} // C2797, VS2013 RTM incorrectly calls 'vector(size_type)'
std::vector<int> v1;
std::vector<int> v2{1, 2}; // C2797, VS2013 RTM incorrectly calls 'vector(size_type, const int &)'
};
Este exemplo também gera C2797:
struct S1 {
int i;
};
struct S2 {
S2() : s1{0} {} // C2797, VS2013 RTM interprets as S2() : s1(0) {} causing C2664
S1 s1;
S1 s2{0}; // C2797, VS2013 RTM interprets as S1 s2 = S1(0); causing C2664
};
Para corrigir esse problema, você pode usar a construção explícita de listas internas. Por exemplo:
#include <vector>
typedef std::vector<int> Vector;
struct S {
S() : v1(Vector{1}) {}
Vector v1;
Vector v2 = Vector{1, 2};
};
Se você não precisar da inicialização da lista:
struct S {
S() : s1("") {}
std::string s1;
std::string s2 = std::string("");
};
(O compilador no Visual Studio 2013 faz isso implicitamente antes do Visual Studio 2013 Atualização 3.)