C4503 de aviso (nível 1) do compilador

'identificador': decorada excedido, o comprimento do nome nome estava truncado.

O nome decorado era maior que o limite do compilador (4096) e foi truncado.Para evitar esse aviso e o truncamento, reduza o número de argumentos ou o comprimento do nome de identificadores utilizados.

Uma situação em que esse aviso será emitido é quando seu código contém modelos especializada em modelos repetidamente.Por exemplo, um mapa de mapas (da biblioteca C++ padrão).Nessa situação, você pode tornar seu typedefs um tipo (struct, por exemplo) que contém o mapa.

Você pode, Entretanto, decidir não reestruturar seu código.É possível enviar um aplicativo que gera a C4503, mas se você receber erros de tempo de link em um símbolo truncado, será mais difícil determinar o tipo do símbolo no erro.Depuração também será mais difícil; o depurador também terá dificuldades para fazer o mapeamento nome simbólico para digitar o nome.A correção do programa, no entanto, é afetada por nome truncado.

O exemplo a seguir gera C4503:

// C4503.cpp
// compile with: /W1 /EHsc /c
// C4503 expected
#include <string>
#include <map>

class Field{};

typedef std::map<std::string, Field> Screen;
typedef std::map<std::string, Screen> WebApp;
typedef std::map<std::string, WebApp> WebAppTest;
typedef std::map<std::string, WebAppTest> Hello;
Hello MyWAT;

O exemplo a seguir mostra uma maneira de reescrever o seu código para resolver C4503:

// C4503b.cpp
// compile with: /W1 /EHsc /c
#include <string>
#include <map>

class Field{};
struct Screen2 {
   std::map<std::string, Field> Element;
};

struct WebApp2 {
   std::map<std::string, Screen2> Element;
};

struct WebAppTest2 {
   std::map<std::string, WebApp2> Element;
};

struct Hello2 {
   std::map<std::string, WebAppTest2> Element;
};

Hello2 MyWAT2;