2016-08-12 7 views
0

Есть несколько вопросов и вопросов по этому вопросу на этом сайте. Я попробовал ответы (включая заголовочные файлы), они не решают мою проблему.NULL необъявленный идентификатор

Я перенес проект с VS2013 на VS2015. После компиляции я получаю сообщение об ошибке: «C2065« NULL »: необъявленный идентификатор». Это не произошло в VS2013. Когда я перехожу к своему коду и «наводил» на «NULL», окно отображается «#define NULL 0». Я могу щелкнуть правой кнопкой мыши по NULL и открыть «определение peek». Файл vcruntime.h открывается и показывает определение NULL. (Этот файл отмечен как доступный только для чтения.)

Почему я продолжаю получать эту ошибку для каждого появления NULL (+200 раз)?

Edit:

#ifndef NULL 
    #ifdef __cplusplus 
     #define NULL 0 
    #else 
     #define NULL ((void *)0) 
    #endif 
#endif 
+0

@Serhio Это вполне допустимо C. Откуда вы взяли эту идею? – Lundin

+0

@Serhio IIRC '#define NULL 0' является стандартным для C. Почему бы и нет? – Magisch

+1

@ Lundin [7.17] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) "... который расширяется до константы нулевого указателя, определенной реализацией ... ". Разве это не означает, что такая константа должна иметь тип указателя типа '((void *) 0)'? – Sergio

ответ

1

Вероятно, вы не включают файлы .h, или компилятор не ищет соответствующую папку. Взгляните на https://msdn.microsoft.com/en-us/library/d69tdh6e.aspx

+0

В каталогах, которые я включил (VC + + Каталоги: .../Windows Kits \ 10 \ Include \ 10.0.10586.0 \ ucrt \) является одним из файлов заголовков, предложенных в статье MSDN: CRTDBG.H. В этом заголовочном файле есть «#include ». Этот заголовочный файл содержит определение NULL. Проблема в том, что этот заголовочный файл уже включен в мой проект, я все еще получаю ошибку ... Это определение, однако, неактивно (после ifndef NULL), что, вероятно, означает, что оно уже определено где-то еще. – pistach

Смежные вопросы