Итак, в следующем коде:
#include <cassert>
// поскипано
void IntArrayRC::check_range(int ix)
{
assert(ix >= 0 && ix < _size);
}
VS .NET говорит вот что —
f:\Visual Studio Projects\ArrayClass\IntArrayRC.cpp(17): error C3861: 'assert': identifier not found, even with argument-dependent lookup
Проект создавался мастером как консольное приложение Win32, затем в него был добавлен класс IntArrayRC (также мастером). Также пробовал включать и Assert.h — реакция та же. Ошибка проявляется только в отдельно взятом проекте, а минимальный вариант —
#include <cassert>
void main(void) {
int i = 1;
assert(i);
}
компилируется без ошибок.
Доктор, мне можно помочь?
Здравствуйте, Develop7, Вы писали:
D>Итак, в следующем коде:
D>D>#include <cassert>
D>// поскипано
D>void IntArrayRC::check_range(int ix)
D>{
D> assert(ix >= 0 && ix < _size);
D>}
D>
D>VS .NET говорит вот что —
D>D>f:\Visual Studio Projects\ArrayClass\IntArrayRC.cpp(17): error C3861: 'assert': identifier not found, even with argument-dependent lookup
D>
меня интерисует полная последовательность инклудов в файле где происходит определение класса IntArrayRC,
также интерисует используется ли precompiled headers (stdafx.h)
В общем сразу скажу что #include "StdAfx.h" должен быть первым, то есть примерно так:
#include "StdAfx.h"
#include ".\intarrayrc.h"
#include <cassert>
"Develop7" <51339@users.rsdn.ru> сообщил/сообщила в новостях следующее:
news:1840958@news.rsdn.ru...
> Итак, в следующем коде:
>
> > #include <cassert>
> // поскипано
> void IntArrayRC::check_range(int ix)
> {
> assert(ix >= 0 && ix < _size);
> }
>
>
> VS .NET говорит вот что —
>
> > f:\Visual Studio Projects\ArrayClass\IntArrayRC.cpp(17): error C3861: 'assert': identifier not found, even with argument-dependent lookup
>
>
> Проект создавался мастером как консольное приложение Win32, затем в него был добавлен класс IntArrayRC (также мастером). Также пробовал включать и Assert.h — реакция та же. Ошибка проявляется только в отдельно взятом проекте, а минимальный вариант —
> > #include <cassert>
> void main(void) {
> int i = 1;
> assert(i);
> }
>
> компилируется без ошибок.
>
> Доктор, мне можно помочь?
Вечно с этими макросами какие-то траблы

Судя по всему в каком-то из заголовков этого проекта этому макросу делается #undef.
Можно выкрутиться, если вставить в своем коде:
#ifndef assert
#define assert(x) if(!(x)) throw std::out_of_range(#x)
#endif
Posted via RSDN NNTP Server 2.0
Вот архив с проектом.
здесь
Посмотрите плиз кто-нить, почему не #define'тся макрос assert из assert.h.
Я понимаю, что скорее всего ошибка очевидна и элементарна, однако понять, в чем грабли, самостоятельно мне пока не удалось. Спасибо.
Здравствуйте, korzhik, Вы писали:
K>В общем сразу скажу что #include "StdAfx.h" должен быть первым, то есть примерно так:
K>K>#include "StdAfx.h"
K>#include ".\intarrayrc.h"
K>#include <cassert>
K>
Работает. Спасибо! С причинами постараюсь разобраться сам.
Здравствуйте, Develop7, Вы писали:
D>Вот архив с проектом.
D>здесь
D>Посмотрите плиз кто-нить, почему не #define'тся макрос assert из assert.h.
D>Я понимаю, что скорее всего ошибка очевидна и элементарна, однако понять, в чем грабли, самостоятельно мне пока не удалось. Спасибо.
Ой... извините — не прочитал тред полностью. Проблема решена (см. выше), тему можно закрыть. Спасибо.