'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?


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!


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.


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.


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


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.