Вопрос № 145162: В редакторе кода Delphi есть полезная фича - при нажатии Ctrl+Shift+1 ставится метка на строку. Потом нажав Ctrl+1 можно быстро вернуться на эту строчку. Не могу найти, как так делать в VC++2008....Вопрос № 145177: Как в C++ сделать глобальные переменные для нескольких *.cpp? Я выношу, например, int nValue в .h, всё компилируется, но при попытке собрать линковщик ругается типа "variable already defined in main.obj"
...Вопрос № 145194: У меня вопросик маленький или прозьба нужен алгоритм "Умножение матрицы на матрицу " если есть пришлите на covalijenia@mail.ru Я предумал свой алгоритм но он дает ошибки после каждой строки в приложение Описание класса MATRIX и функция ...Вопрос № 145203: Сделал прогу на чистом Win32 API, в VC++2008, в ХР. Попробовал запустить в Висте (там не ст
авил VC++2008). Получил вежливый отказ: "не могу запустить из-за неправильной параллельной конфигурации, см. подробности в журнале". В журнале написа...
Вопрос № 145.162
В редакторе кода Delphi есть полезная фича - при нажатии Ctrl+Shift+1 ставится метка на строку. Потом нажав Ctrl+1 можно быстро вернуться на эту строчку. Не могу найти, как так делать в VC++2008.
Отправлен: 27.09.2008, 04:04
Вопрос задал: effort (статус: Студент)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Sk0rp
Здравствуйте, effort! поставить/снять закладку Alt+F2 перейти вперед F2, назад Shift+F2
Ответ отправил: Sk0rp (статус: 5-ый класс)
Ответ отправлен: 27.09.2008, 04:29 Оценка за ответ: 5 Комментарий оценки: В минифоруме решение полное
Вопрос № 145.177
Как в C++ сделать глобальные переменные для нескольких *.cpp? Я выношу, например, int nValue в .h, всё компилируется, но при попытке собрать линковщик ругается типа "variable already defined in main.obj"
Приложение:
Отправлен: 27.09.2008, 11:17
Вопрос задал: effort (статус: Студент)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Sk0rp
Здравствуйте, effort!
Все правильно ругается, т.к. объект пытается инстанцироваться в каждом месте, куда вы включаете h файл. Объект может быть только один, соответственно он должен быть определен в каком нибудь cpp файле. 1. Перенесите int nValue в любой cpp файл. 2. В других файлах (можно и в h файде), там где эта переменная будет нужна напишите: extern int nValue; что и будет означать внешнюю линковку с глобальным объектом.
Ответ отправил: Sk0rp (статус: 5-ый класс)
Ответ отправлен: 27.09.2008, 11:29 Оценка за ответ: 5 Комментарий оценки: Всё заработало. ЗЫ: вы мне так в прошлом вопросе и не ответили, как ставить букмарки в редакторе кода
Отвечает: realbustard
Здравствуйте, effort! Попробуйте в файлах *.срр объявить переменную nValue как extern. Ключевое слово extern означает, что переменная объявлена в *.cpp, но не определена.Т.е. получится следующее: extern int nValue. А переменную nValue определите в файле *.h
--------- Учись так, как-будто собираешься жить вечно; живи так, как-будто завтра умрешь (Отто фон Бисмарк)
Ответ отправил: realbustard (статус: 3-ий класс)
Ответ отправлен: 27.09.2008, 11:42
Отвечает: mega
Здравствуйте, effort! когда при при сборке линковщик определяет несколько экзкмпляров одной переменной в объектных файлах (*.obj), это говорит о том, что в несколько компилируемых файлов проекта *.cpp был включен заголовочный файл, в котором определена и инициализирована nValue. Поскольку все объектные файлы собираются в один исполняемый (*.exe, *.dll), все статические переменные проекта должны быть обязательно в одном экземпляре.
по хорошему, это должно решаться инициализацией переменной в каком-то
одном *.cpp, как подметил Sk0rp, но если вы используете инлайн методику программирования, этот вариант не всегда может быть преемлем, поскольку в таком случае, все взаимозависимости программы находятся в звголовочных файлах. Решить проблему можно на уровне препроцессора линковщика, с использованием дополнительной декларации к переменной __declspec(selectany). В общем-то, название selectany говорит само за себя: при линковке, встретив несколько экземпляров переменно
й, выбрать любой из них.
PS: модификатор __declspec поддерживается не всеми комиляторами, но точно присутствует в MSVC 6, MSVC 7.1 и выше
Приложение:
Ответ отправил: mega (статус: 5-ый класс)
Ответ отправлен: 27.09.2008, 11:55 Оценка за ответ: 5 Комментарий оценки: не проверял, но ответ заслуживает внимания
Отвечает: Михеев Евгений
Здравствуйте, effort! Попробуйте сделать класс, содержащий только эти переменные
Ответ отправил: Михеев Евгений (статус: 1-ый класс)
Ответ отправлен: 27.09.2008, 21:11
Вопрос № 145.194
У меня вопросик маленький или прозьба нужен алгоритм "Умножение матрицы на матрицу " если есть пришлите на covalijenia@mail.ru Я предумал свой алгоритм но он дает ошибки после каждой строки в приложение Описание класса MATRIX и функция сложения " MATRIX * Multiplication_matrixes_on_a_matrix ( MATRIX * , int , int ); "
Отвечает: realbustard
Здравствуйте, Covalijenia! В приложении код, использующий ф-у умножения матриц, которую ,в принципе, можно оптимизировать, например сделав меньшее количество аргументов. Но остановимся на алгоритме ее работы. Она получает 3 указателя на матрицы: А,В-множители; С-результат; m1..n2-размеры матриц А,В. Перед присваиванием матрице определенного значения, число, находящееся по адресу этого элемента С[i][j] обнуляется, чтоб мы были уверены, что там ноль, а не что иное. Ну что сначала цикл по i, затем по j, это
объяснять не надо.
А вот на цикле по k остановлюсь. Каждый элемент результирующей матрицы складывается из суммы произведений элементов 2х матриц, например, если A[2][2] и B[2][2], то
Можно заметить, что некоторые значения i и j в многочлене совпадают со значениями i,j в теле
цикла, а некоторые отличаются на 1 от них, т.е. можно записать так:
C[i][j]=A[i][?]*B[?][j]+A[i][?]*B[?][j]; где: i,j - переменные значения которых, совпадают со значениями i,j в C[i][j];
Знак вопроса - это число, которое увеличивается от 0 до (n1-1) и оно равно числу членов в многочлене, в данном случае 2.
Если подставить вместо ? к, то получим:
C[i][j]=A[i][k]*B[k][j]+A[i][k+1]*B[k+1][j];
Чтобы проще посчитать С[i][j] и был введен 3й цикл по к Общий вид многочлена принял
вид:
C[i][j]=Сумма_по_k (A[i][k]*B[k][j]) ); где к==0...(n1-1)
//k - это итератор, равный n1 и m2. for(int k=0;k<n1;k++){ C[i][j]+=A[i][k]*B[k][j]; }
Приложение:
--------- Учись так, как-будто собираешься жить вечно; живи так, как-будто завтра умрешь (Отто фон Бисмарк)
Ответ отправил: realbustard (статус: 3-ий класс)
Ответ отправлен: 28.09.2008, 01:56
Вопрос № 145.203
Сделал прогу на чистом Win32 API, в VC++2008, в ХР. Попробовал запустить в Висте (там не ставил VC++2008). Получил вежливый отказ: "не могу запустить из-за неправильной параллельной конфигурации, см. подробности в журнале". В журнале написали: "Не найдена зависимая сборка Microsoft.VC90.CRT, processorArchitecture="x86", publicKeyToken="1fc8b3b9a1e18e3b", type="win32",version="9.0.21022.8"". Используйте sxstrace.exe для подробной диагностики." Как
я понял, Студия собрала ексэшник, зависимый от каких-то длл. Как овязаться от этих длл??? Цель при разработке была в малом размере дистрибутива!
Отправлен: 27.09.2008, 16:52
Вопрос задал: effort (статус: Студент)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
prroject -> Project Properties -> Configurations Properties -> Linker -> Manifest File -> Generate Manifest: No
--------- Лучше идти чем бежать, лучше стоять чем идти, лучше сидеть чем стоять, лучше лежать чем сидеть, лучше умереть чем лежать.
Ответ отправил: Zloi_goh (статус: 1-ый класс)
Ответ отправлен: 28.09.2008, 19:01 Оценка за ответ: 5 Комментарий оценки: спасибо, я уже в Интернецци нашёл