Ошибки, баги, вопросы - страница 3347
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вообще-то, адрес, по которому разыменовывать A::i компилятору известен))) Ну, конечно, если это С++))). Требование инициализации статических полей класса происходит из того, что Declaration of a non-inline (since C++17) static data member inside a class definition не является definition. https://en.cppreference.com/w/cpp/language/definition На лицо, явный баг компилятора.
У нас тут MQL обсуждался, но раз пошел разговор за плюсы, то объясните мне, пожалуйста, откуда компилятору может быть известен адрес того, чего нет?
Вот простой кусок кода на C++.
Из него генерится примерно такой ассемблерный код
main: ..................... movl _ZN1A1iE(%rip), %eax movl %eax, -4(%rbp) .....................
У нас здесь есть только название чего-то
И только компоновщик при попытке собрать исполняемый файл выдает ошибку.
Которую я понимаю как: упс, у меня здесь есть некий символ _ZN1A1iE и я не понимаю что подставить на его место
Если добавить определние статической переменной
То в ассемблере добавляется блок с описанием этой _ZN1A1iE
И все нормально собирается.
Если под "известный компилятору адрес" Вы имели ввиду это самое название на которое он может ссылаться, то ок. Иначе прошу объяснений :)
Вот простой кусок кода на C++.
Из него генерится примерно такой ассемблерный код
А какое отношение этот код имеет к моему примеру?
У меня речь о том, что при прочих равных условиях в одном случае ошибка, а в другом ее нетЕсли объявляете статическую переменную, то следует ее и определить.
Попробуйте добавить в класс метод обращающийся к переменной и уже получите ошибку компиляции в коде класса
А принципиальная разница между вашими случаями (1) и (2) следующая (очень грубо):
Во втором случае вы объявляете глобальную переменную-экземпляр класса. Компилятору необходимо выделить память для нее и всего связанного с классом и здесь же компилятор пытается понять куда указывает имя `A::i`.
А в первом случае вы объявляете глобальную переменную-указатель на экземпляр класса. Здесь компилятору надо выделить память только для указателя, а сам объект будет создан уже в процессе выполнения программы.
У нас тут MQL обсуждался, но раз пошел разговор за плюсы, то объясните мне, пожалуйста, откуда компилятору может быть известен адрес того, чего нет?
Вот простой кусок кода на C++.
Из него генерится примерно такой ассемблерный код
У нас здесь есть только название чего-то
И только компоновщик при попытке собрать исполняемый файл выдает ошибку.
Которую я понимаю как: упс, у меня здесь есть некий символ _ZN1A1iE и я не понимаю что подставить на его место
Если добавить определние статической переменной
То в ассемблере добавляется блок с описанием этой _ZN1A1iE
И все нормально собирается.
Если под "известный компилятору адрес" Вы имели ввиду это самое название на которое он может ссылаться, то ок. Иначе прошу объяснений :)
Это не название чего-то, это имя метки. Вы не дочитали мой пост до конца или не поняли. Поясняю.
Есть Declaration, это когда мы объявили переменную. Компилятор абсолютно спокойно вводит имя метки и везде, где нужно делает rip адресацию через нее. Поэтому я и говорю, что компилятор ЗНАЕТ адрес переменной, потому, что эта метка должна появится потом и компоновщик вычислит смещение до нее и на выходе, естественно, не будет никаких меток, а будет вот это:
Поясняю.
Такое ощущение, что не весь синтаксис SQLite поддерживается
Если я ввожу str_Marka="зил", то получаю пустой ответ - иначе говоря, оператор LOWER ничего не делает. При значении ЗИЛ - всё ищется - в базе записано "ЗИЛ"
Можете это проверить?
Такое ощущение, что не весь синтаксис SQLite поддерживается
Если я ввожу str_Marka="зил", то получаю пустой ответ - иначе говоря, оператор LOWER ничего не делает. При значении ЗИЛ - всё ищется - в базе записано "ЗИЛ"
Можете это проверить?
Похоже на проблемы с локалью.
Похоже на проблемы с локалью.
Как то можно их решить?
Как то можно их решить?
По идее, неплохо бы убедиться, что МТ и SQLite используют одну и ту же русскую локаль. Но не подскажу, как именно.
При запуске визуального тестирования окно тестера находится вот в таком положении:
И вот, после каждого запуска, чтобы добраться до полосы прокрутки логов, нужно или жать на кнопку, чтобы развернуть окно тестера, или сдвигать его мышкой.