'uint32_t' identificador não encontrado erro

93

Estou portando o código do Linux C para o Visual C ++ para windows.

O Visual C ++ não sabe, #include <stdint.h>então comentei.

Mais tarde, encontrei muitos desses 'uint32_t': identifier not founderros. Como pode ser resolvido?

kevin
fonte
Quais incluem você está comentando?
Daniel A. White,
3
E qual (is) versão (ões) do Visual C ++ você está usando? Os uint32_te outros tipos inteiros de largura exata são apenas parte de C99 e C ++ 0x, portanto, compiladores mais antigos (como Visual C ++ 2008 e anteriores) não os têm.
James McNellis
Bastante !!! #include <stdint.h> #include <syslog.h> #include <linux / stddef.h> #include <pthread.h> #include <unistd.h> Obrigado !!!
kevin
Estou usando o Visual C ++ express 2008.
kevin
4
@kevin: Você não pode simplesmente remover cabeçalhos específicos da plataforma e esquecê-los. Você tem que encontrar alternativas para a nova plataforma. Isso geralmente envolve certa quantidade de reescrever seu código para torná-lo portátil.
Lightness Races in Orbit

Respostas:

113

Este tipo é definido no cabeçalho C, <stdint.h>que faz parte do padrão C ++ 11, mas não é padrão no C ++ 03. De acordo com a página da Wikipedia no cabeçalho , ele não foi enviado com o Visual Studio até o VS2010.

Enquanto isso, você provavelmente pode falsificar sua própria versão do cabeçalho adicionando typedefs que mapeiam os tipos inteiros personalizados da Microsoft para os tipos esperados por C. Por exemplo:

typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
/* ... etc. ... */

Espero que isto ajude!

templatetypedef
fonte
4
Você também pode usar a implementação cstdint do Boost.
Peter Huene,
Eu copio e colo seu código na minha página. Mas mostra este erro "erro de sintaxe: ausente ';' antes do identificador 'int32_t' "e" especificador de tipo ausente - int assumido. Nota: C ++ não suporta default-int ".
kevin
Desculpe, Peter, sou novo no C. Qual é a implementação cstdint do Boost?
kevin
3
Os tipos inteiros de tamanho fixo da Microsoft não terminam em "t". Tente apenas __int32.
Ben Voigt,
1
u_int32_te uint32_tnão são do mesmo tipo; um tem um sublinhado extra após o u. Isso parece um problema separado.
templatetypedef
78

Você pode #include <cstdint>. Faz parte do C ++ - padrão desde 2011.

Tigerle
fonte
1
Esta provavelmente deve ser a resposta aceita devido às restrições da pergunta, como C ++ e VS2010. Não há necessidade de rolar seus próprios typedef's.
jww
7

Eu tenho o mesmo erro e ele corrigiu incluindo no arquivo o seguinte

#include <stdint.h>

no início de seu arquivo.

Nacho Barreto
fonte
Conforme apontado na pergunta, stdint.h não faz parte do compilador C ++ que o OP está usando. Esta resposta não responde à pergunta.
Inspecionável
7

Boost . O Config oferece esses typedefs para conjuntos de ferramentas que não os fornecem nativamente. A documentação para esta funcionalidade específica está aqui: Tipos inteiros padrão

ildjarn
fonte
3

Há uma implementação disponível na página do projeto msinttypes - "Este projeto preenche a ausência de stdint.h e inttypes.h no Microsoft Visual Studio".

Não tenho experiência com essa implementação, mas já a vi recomendada por outras pessoas no SO.

Brandon Leiran
fonte
Esta é a melhor e mais comumente usada implementação.
Philippe Ombredanne
0

Tive que executar o projeto no VS2010 e não consegui introduzir nenhuma modificação no código. Minha solução foi instalar o vS2013 e no VS2010 apontar VC ++ Directories-> IncludeDirectories to Program Files (x86) \ Microsoft Visual Studio 12.0 \ VC \ include. Então meu projeto compilou sem problemas.

Darqer
fonte