Вопрос № 72802: Здраствуйте поставил Borland C++ под винду...Но при компиляции текста программы,содержащей подключение графики выходит
"#if defined( _Windows ) && !defined (__DPMI16__) && !defined(__DPMI32__)
#error BGI graphics not supported under Win...Вопрос № 72917: Уважаемые эксперты, подскажите, как получить доступ к переменной(массиву MyItem вм.приложение) в C++ Builder, из формы2, если массив был создан до создания формы1...Вопрос № 72920: Здравствуйте! Помогите пожалуйста, написать программу на С++ к следующей работе! Заранее СПАСИБО! Работа со строками. Текстовые файлы.
Задание. Составить программу, выполняющую преобразования над текстовыми файлами согласно заданному варианту. Ис...Вопрос № 72923: Растолкуйте мне пожалуйста суть масива указателей.
Это типа каждый елемент выступает указателем, и с ним можно делать все то-же самое что и с обычним указателем. Но тогда следующий вопрос. Если написать
char *array[]={"a",&qu...Вопрос № 72936: Здравствуйте, уважаемые эксперты.
В приложении находится код, который почему то не компилируется. (M$ Visual C++ 6.0). Ошибка линковки:
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Matrix<int>::MatrixRo...
Вопрос № 72.802
Здраствуйте поставил Borland C++ под винду...Но при компиляции текста программы,содержащей подключение графики выходит
"#if defined( _Windows ) && !defined (__DPMI16__) && !defined(__DPMI32__)
#error BGI graphics not supported under Windows"
Подключение имеет вид:
Отвечает: ramok
Здравствуйте, гацев Игорь Валерьевич!
вы выбрали какой то уж старый компилятор..
это подключение графики под дос. укажите в вашей среде что вы пытаетесь откомпилировать программу под дос. я точно сейчас не скажу, но ищите примерно следующее:
project target -> DOS application (.exe)
и запускайте эту программу только в полноэкранном режиме, не в оконном.
PS
вместо "c:gi" следует писать "c:\bgi"
Ответ отправил: ramok (статус: Студент)
Ответ отправлен: 27.01.2007, 00:56 Оценка за ответ: 5
Отвечает: Neil
Здравствуйте, гацев Игорь Валерьевич!
В Windows режим консольного приложения (типа досовского) называется Console application, но графика а-ля Borland C++ 3.1 там не катит.. Читайте литературу по графике в Windows или в Builder-е (Яндекс, надеюсь, поможет - а если не поможет, пишите на radical05@mail.ru).
Ответ отправил: Neil (статус: 1-ый класс)
Ответ отправлен: 27.01.2007, 01:06
Вопрос № 72.917
Уважаемые эксперты, подскажите, как получить доступ к переменной(массиву MyItem вм.приложение) в C++ Builder, из формы2, если массив был создан до создания формы1
Приложение:
Отправлен: 27.01.2007, 21:03
Вопрос задал: Azrr (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Neil
Здравствуйте, Azrr!
Ваш массив является глобальной статической переменной, и виден из любой функции, выше которой встречается его объявление.
Замечания по Вашему коду:
1) Описывайте в .h-файлах только те функции, которые Вы хотите сделать общедоступными, и только в виде заголовка, т.е.
int calc_sum();
2) Код этих функций следует писать в .cpp-файлах, и только 1 раз в проекте. Если Вы хотите использовать в .cpp-файле (файл номер 1) функцию, описанную в другом .cpp-файле (файл 2), подключите в файле 1 .h-файл, соответствующий файлу 2, так:
#include "файл_2.h", где файл_2 - имя файла файл_2.cpp
3) Описывайте глобальные переменные в .cpp, а не в .h файлах.
4) В тех .cpp-файлах, в которых вы хотите использовать переменную, описанную в другом файле, в начале пишите:
если переменная объявлена как "items MyItem[256];",
то там, где она нужна, пишите "extern items* MyItem;"
В п. 4 есть альтернатива: если переменная объявлена в Unit1.cpp (где она у Вас по логике и должна быть), тогда строчку с extern можно поместить в Unit1.h, а в Unit2.cpp написать:
#include "Unit1.h"
Пояснения: все переменные, описанные глобально (вне функций) в некотором .cpp - файле, являются статическими и глобальными для данного .cpp-файла.
Ключевое слово extern указывает, что данная переменная для файла является внешней, т.е. описана где-то ещё, а данный файл использует её как внешнюю.
Описания переменных и тела функций не следует лепить в .h-файлы, поскольку при подключении .h-файлов с помощью #include возникнет ошибка, поскольку переменные и функции с одинаковыми именами будут описаны несколько раз в проекте.
Ответ отправил: Neil (статус: 1-ый класс)
Ответ отправлен: 27.01.2007, 21:33
Вопрос № 72.920
Здравствуйте! Помогите пожалуйста, написать программу на С++ к следующей работе! Заранее СПАСИБО! Работа со строками. Текстовые файлы.
Задание. Составить программу, выполняющую преобразования над текстовыми файлами согласно заданному варианту. Исходный текстовый файл создается при помощи редактора текста и может содержать произвольную последовательность различных символов произвольной длины.
Вариант3: Скопировать исходный файл в другой, удалив палиндромы в промежутке между введенными начальной и конечной цепочками. На экран вывести количество скопированных и удаленных слов.
С уважением, Галя.
Отправлен: 27.01.2007, 21:19
Вопрос задала: Галя (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Терсков Сергей
Здравствуйте, Галя!
Вот вариант на C++. Из исходного текста удаляются слова-палиндромы.
Приложение:
Ответ отправил: Терсков Сергей (статус: 5-ый класс)
Ответ отправлен: 29.01.2007, 05:44
Отвечает: Rewer8
Здравствуйте, Галя!
Вот ещё вариант
Если будут вопросы пишите
Приложение:
Ответ отправил: Rewer8 (статус: 1-ый класс)
Ответ отправлен: 30.01.2007, 22:54
Вопрос № 72.923
Растолкуйте мне пожалуйста суть масива указателей.
Это типа каждый елемент выступает указателем, и с ним можно делать все то-же самое что и с обычним указателем. Но тогда следующий вопрос. Если написать
char *array[]={"a","b","b"};
то тогда что на что будет указывать???????
Отправлен: 27.01.2007, 21:33
Вопрос задал: Platon (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Массив суть указатель на первый элемент последовательности элементов одинакового размера.
Двойные кавычки (") означают указатель на последовательность байтов, оканчивающуюся байтом со значением 0.
Объявление вида
тип_переменной имя_переменной[]
объявляет массив из элементов, тип которых есть тип_переменной
В Вашем случае тип_переменной есть char*, т.е. указатель на char
Для упражнения: осознайте суть объявлений:
а) char** array[]
б) char*** array[]
и т.д.
а) - каждый элемент массива есть указатель на char*, т.е. указатель на указатель на char.
а) - каждый элемент массива есть указатель на char**, т.е. указатель на указатель на указатель на char.
Во всех случаях *array есть первый элемент массива, его тип совпадает с тем, что указано перед array в объявлении.
Ответ отправил: Neil (статус: 1-ый класс)
Ответ отправлен: 27.01.2007, 21:46
Отвечает: Базанов Иван Александрович
Здравствуйте, Platon!
Тогда array - масив указателей на char из 3х элементов, проинициализированных указанными значениями -"a", "b", "c"
array[0]=="a" типа char*
array[1]=="b" типа char*
array[2]=="b" типа char*
Далее, в зависимости от настроек компилятора, array[1] и array[2] могут указывать на одну область памяти, выделенную под строку "b"
В общем array[i] можно использовать везде где требуется указатель на char
--------- Программист ошибается дважды: первый раз при рождении, второй при выборе профессии
Отвечает: Thread
Здравствуйте, Platon!
Вы, как и многие из начинающих С++ программистов столкнулись со сложность реализации строк. Видете ли строка в С++ это указатель по сути дела на первый символ этой сторки. Вообще говоря это массив символов по сути дела. Рассмотрим пример.
int *p = new int[3];
Обращаться к элементу можно так: p[index] или так *(p + index)
Как мы видим здесь оператор new выделяет три свободных подряд идущих ячеек и возвращает указатель на первую из них. На самом деле в С++ char - это не символ, это целочисленный тип, отличающийся только своим границами - 0..255, и если мы сделаем
char *p = new char[3];
То тоже будет массив целых чисел. Строка в С++ это массив целых чисел, последним элементом которго является символ 'Вот пример:
char *s = new char[3];
s[0] = 'a';
s[1] = 'b';
s[2] = 'Так мы получили строку "ab".
Тогоже самого можно добиться написав char *s = "ab"; НО здесь разница в том, что элементы этой строки изменять нельзя. Надо помнить что s - это указатель на первый символ. Используя операцию разименовывания вы сами можете в этом убедиться. Т.е.:
char *s = "ab";
char f = *s;
Значение f в этом случае будет равно 'a'.
Вернемся к Вашему примеру. У Вас действительно массив указателей и каждый из указателей указывает на первый символ строки.
array[0] - это указатель на первый символ строки "a" т.е. указатель на первую ячейку массива 'a' '
Ответ отправил: Thread (статус: 3-ий класс)
Ответ отправлен: 28.01.2007, 10:21
Отвечает: kool
Здравствуйте, Platon!
В записи char *array[]={"a","b","b"};
массив указателей array будет содержать
ТРИ указателя соответственно на строки "a","b","b".
Причем указатели на 2-ю и третью строки будут
разные, хотя эти строки будут содержать одинаковые элементы.
Удачи!
Ответ отправил: kool (статус: 6-ой класс)
Ответ отправлен: 28.01.2007, 11:04
Вопрос № 72.936
Здравствуйте, уважаемые эксперты.
В приложении находится код, который почему то не компилируется. (M$ Visual C++ 6.0). Ошибка линковки:
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Matrix<int>::MatrixRow<int>::MatrixRow<int>(unsigned int)" (??0?$MatrixRow@H@?$Matrix@H@@QAE@I@Z)
Такое впечатление, что я как-то неправильно определил конструктор вложенного класса. Если этот конструктор определить сразу в описании класса, не вынося его отдельно - все работает. Вопрос - почему?
Заранее спасибо.
Отвечает: Базанов Иван Александрович
Здравствуйте, Алексеев В.В.!
К сожалению , как описано в MSDN, для MSVC, их реализация ДОЛЖНА быть описана в h-файле (заголовочном файле). Иначе проект не слинкуется.
Ответ - таков MSVC. Если угодно - глюк (или фича) :)
--------- Программист ошибается дважды: первый раз при рождении, второй при выборе профессии
Ответ отправил: Базанов Иван Александрович (статус: 2-ой класс)
Ответ отправлен: 27.01.2007, 23:24 Оценка за ответ: 2 Комментарий оценки: Если вы посмотрите исходник, то увидите, что все что написано выше комменатрия "//main.cxx" и ниже первой строки - "//matrix.hxx" описано именно в .hxx файле (непосредственно расширение, на мой взгляд, дела не меняет), кроме того линкер ничего не говорит на вызов конструктора внешнего класса, хотя он определен аналогично конструктору вложенного.
Отвечает: Neil
Здравствуйте, Алексеев В.В.!
Зачем Вам вообще вложенный класс? Нет возможности проверить, но есть подозрение, что в описании класса нужно выкинуть внутренний template.. (см. приложение)
Приложение:
Ответ отправил: Neil (статус: 1-ый класс)
Ответ отправлен: 28.01.2007, 00:25 Оценка за ответ: 4 Комментарий оценки: Вложенный класс необходим, чтобы реализовать доступ к элементам матрицы через двойной operator[] (как к двумерным массивам). Я знаю, что это реализуется именно через вложенный класс, поэтому данное решение не подходит.