Ошибки, баги, вопросы - страница 2417

 
Alexey Navoykov:

Я в курсе, что не компилируется.  Речь идёт о проверке синтаксиса (что в ME тоже называется термином "Компилировать"), ведь я в прошлом посте даже уточнил это в скобках.  Если в компиляторе C++ тоже запустить проверку синтаксиса (через командную строку обычно), то он будет ругаться как миленький.

Смотрите, если не указать:

B b;

то C++ отлично компилирует данный код. Значит синтаксис верен. Проблема начинается на уровне создания объектников, потому что именно там будут аллоцироваться объекты классов.

Просто представьте себе template, который вы ну никак не проверите на использование в хэдере. Что должен делать компилятор в данном случае? Или, допустим, надо std:lower реализовать для структуры, и в *.h нет реализации... Тоже компилятор не должен ругаться на этапе проверки же.

Можете уточнить, как из командной строки вы проверяете синтаксис для *.h чтобы ругалось на данный код? Интересно стало)

 
Andrey Pogoreltsev:

Смотрите, если не указать:

то C++ отлично компилирует данный код. Значит синтаксис верен.

Интересная у вас логика )  А если вообще удалить весь код, значит синтаксис ещё более верен? )  Я привёл конкретный код.  Речи не шло о том, что именно класс B некорректен.  Его вполне можно использовать для вызова статических методов и т.д.

Просто представьте себе template, который вы ну никак не проверите на использование в хэдере. Что должен делать компилятор в данном случае?

Не стоит подменять понятия.  Шаблон проверяется только в момент его раскрытия конкретными типами, это понятное дело.

Можете уточнить, как из командной строки вы проверяете синтаксис для *.h чтобы ругалось на данный код? Интересно стало)

Тут я не подскажу, т.к. не стал заморачиваться с такими бубнами,  а написал себе макрос для VS, делающий компиляцию хедера.  Для этого он на лету переключает режим текущего документа на cpp, проводит компиляцию, затем возвращает обратно.  Простенько и со вкусом.

Мне вообще не понятно, почему в студии нет нормальной штатной опции для проверки синтаксиса хедеров. Правда я пользуюсь довольно старой версией, может уже появилось такое.

 
Alexey Navoykov:

Мне вообще не понятно, почему в студии нет нормальной штатной опции для проверки синтаксиса хедеров.

Ctrl+F7 , такое сочетание есть начиная наверное минимум с 2008 студии - компилировать отдельный файл
 
TheXpert:
Ctrl+F7 , такое сочетание есть начиная наверное минимум с 2008 студии - компилировать отдельный файл
Речь шла о хедерах.  А данное сочетание относится к cpp. По крайней мере у меня в 2010 студии так.
 

Долго колебался прежде чем постить, перепроверял свою поделку, но всё-таки с тестером что-то не так...

Прервался тест буквально в начале:

Не меняя ничего, нажимаю "старт" второй раз, проходит до конца (с небольшой паузой в том месте, где прервался) :

Сделал ещё несколько подходов - результаты строго чередуются (один за другим, чёт/нечет). До места "обрыва" графики баланса похожи. Повторюсь, ничего не меняю, только кликаю "Start"

Вероятнее всего это момент, когда добавляет ещё один символ (почему не все 5 с начала теста?):


Оставляя в стороне вопрос фактического наличия памяти (по данным диспетчера задач, свободно 1,2-1,4ГБ, т.е. совпадает с сообщением), не может же быть, что для выполнения одного и того же теста нужно разное количество памяти? Да и если по отчёту достаточно 400Мб, можно три таких теста запустить на 1.2Гб...

Дополнительные данные: тест на 5ти символах, по открытию баров, Н1, 2004...сегодня. В теле 7 массивов double на 500 элементов и один маленький массив-структура (хранит данные для каждого символа, т.е. в данном случае 5 х 13), размеры задаются при инициализации и больше не меняются, т.е. просто нечему пожирать память. Код процедурный, простенький, маленький, без рекурсий и подключаемых библиотек.

На четырёх символах - работает, на 6-7-8 - та же история, что на 5ти - через раз. При этом первый раз после добавления нового символа - всегда проходит, следующий - нет, потом опять проходит и т.д.

Есть подозрения, что память не высвобождается своевременно, только наличие ошибки, связанной с её нехваткой.

Итого 3 проблемы:

  • проходит тест через раз (строго) при отсутствии изменений в настройках либо коде
  • свободной памяти достаточно для нескольких тестов (если верить сообщению после успешного прохода), но появляется ошибка о её нехватке (на чётных попытках). (при "успехе" использовано 400, было свободно 1200 при ошибке)
  • некоторые символы подключаются к середине теста, при наличии истории (по журналу синхронизации это видно). Опрос сигнала на каждом новом баре всех символов (в цикле)

 
Alexey Navoykov:
Речь шла о хедерах.  А данное сочетание относится к cpp. По крайней мере у меня в 2010 студии так.
да ( и ваш способ похоже удобнее чем делать пустой cpp для хедера
 

Почему это запрещено?

void fn(const int&) {}

void start() {
   fn(5);  // parameter passed as reference, variable expected

}
 
Vict:

Почему это запрещено?

так повелось издревле. литералы только по значению. почему - хз, надо разрабов спрашивать
 
TheXpert:
так повелось издревле. литералы только по значению. почему - хз, надо разрабов спрашивать

Передача параметра по ссылке предполагает наличие переменной, распределённой в памяти.

Константы же нигде не хранятся, а используются непосредственно.

 
TheXpert:
так повелось издревле. литералы только по значению. почему - хз, надо разрабов спрашивать

В угоду мазохистам. Стандартная билиотека не впечатлила, решил написать подобие vector, но из-за обилия "фишечек" получается ещё одна недоподелка.

void push_back(const T &value);
Причина обращения: