Вопрос № 96629: Здравствуйте!Подскажите как преобразовать тип string к типу AnsiString?заранее спасибо...Вопрос № 96658: Здравствуйте уважаемые эксперты!
Посмотрите пожалуйста код простенькой программы, которая в бесконечном цикле просит ввести число и если оно положительное, то суммирует, иначе выход из программы.
#include <iostream>
#inc...Вопрос № 96696: Здравствуйте! Я написал скрипт на С++ в среде C++Builder6.0 скомпилировал получился файл с расширением *.exe У меня сайт на платном хосте, сервер работает под ОС Linux. Проблемма в том, что я не могу скомпилировать файл *.cpp используя доступ SSH, де...
Вопрос № 96.629
Здравствуйте!Подскажите как преобразовать тип string к типу AnsiString?заранее спасибо
Отправлен: 27.07.2007, 17:19
Вопрос задал: Hunter20 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Терсков Сергей
Здравствуйте, Hunter20!
У класса AnsiString - перегружен оператор присваивания = для константных C-строк. Поэтому можно воспользоваться следующей конструкцией:
AnsiString a_str;
string str("A test string");
a_str = str.c_str();
Или напрямую одним из конструкторов класса AnsiString:
string str("A test string");
AnsiString a_str(str.c_str());
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 31.07.2007, 03:43 Оценка за ответ: 5
Вопрос № 96.658
Здравствуйте уважаемые эксперты!
Посмотрите пожалуйста код простенькой программы, которая в бесконечном цикле просит ввести число и если оно положительное, то суммирует, иначе выход из программы.
#include <iostream>
#include <conio.h>
using namespace std;
//Описываем функцию суммирования.
int main ()
{
int a = 0;
for (;;)
{
int nChislo;
cout << "Vvedite chislo
";
cin >> nChislo;
//Проверяем введённое число.
if (nChislo > 0)
{
a = a + nChislo;
continue;
}
else (nChislo < 0);
{
cout << "Vvedeno otritsatelnoe chislo
";
break;
}
}
getch ();
return a;
}
Программа работает только в том случае, если функция называется main. Стоит только дать ей произвольное имя, например int summa или void summa, то при компилировании выдаёт:
Build started: Project: case, Configuration: Debug Win32 ------
Compiling...
case.cpp
c:documents and settingssplashmy documentsvisual studio 2005projectscasecasecase.cpp(25) : warning C4996: 'getch' was declared deprecated
c:program filesmicrosoft visual studio 8vcincludeconio.h(145) : see declaration of 'getch'
Message: 'The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.'
Linking...
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
C:Documents and SettingssplashMy DocumentsVisual Studio 2005ProjectscaseDebugcase.exe : fatal error LNK1120: 1 unresolved externals
Build log was saved at "file://c:Documents and SettingssplashMy DocumentsVisual Studio 2005ProjectscasecaseDebugBuildLog.htm"
case - 2 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Две ошибки, при чём не понятно какого характера.
Объясните пожалуйста.
Отвечает: Алексей Демаков
Здравствуйте, Чирков Вячеслав Александрович!
1. Выполнение C/C++ программы начинается с функции main. Если вы пытаетесь собрать исполнимую программу, а функция main отсутствует - будет сообщение об ошибке, в данном случае:
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
На второе сообщение об ошибке не стоит обращать внимания, оно про то же самое.
Можете переименовать функцию в int summa, но при этом добавить функцию main.
Ответ отправил: Алексей Демаков (статус: Студент)
Ответ отправлен: 27.07.2007, 23:41
(ответ эксперта Алексея Демакова)... т.е. сделать нечто вроде этого:
Приложение:
Ответ отправил: V1s0r (статус: 3-ий класс)
Ответ отправлен: 27.07.2007, 23:57 Оценка за ответ: 4
Отвечает: Ilkras
Здравствуйте, Чирков Вячеслав Александрович!
Ошибка здесь только одна - провал попытки линкера найти функцию main. Имя первой или главной функции ("main") является частью стандарта С и С++. Именно к этой функции линкер должен добавить сартовый код, который сделает програму исполнимой.
В принципе, если вы не даете вашей вызываемой функции имя "main", то програма может быть откомпилирована в объектный код (вы получите на выходе файл(ы) типа fail.obj или fail.o) и может быть слинкована позже с любым исполняемым модулем. Например в операционной системе vxworks вы сможете запустить вашу функцию просто по имени. Причина - данная система поддерживает динамическую линковку. WIndows, во всех вариантах, динамическую линковку не поддерживат (вы можете это сделать из своей програмы, но это
не произойдет автоматически) и стало быть, для того чтобы создать отдельную исполняемую програму вам надо определить имя "main".
Еще один способ обойти имя "main" - вы можете построить динамическую библиотеку (dll), она не требуе имени "main" и представляет собой набор объектных модулей, готовых быть подгруженными другой програмой. После этого вам надо создать исполняемый модуль, который будет подгружать нужный dll и вызывать нужную функцию, его можно сделать интерактивным. Тогда вы сможете вызывать любые функции из любых dll-й.
Ответ отправил: Ilkras (статус: Студент)
Ответ отправлен: 28.07.2007, 09:28 Оценка за ответ: 4
Отвечает: Sema
Здравствуйте, Чирков Вячеслав Александрович!
Ну как бы все консольные прогрммы на С++ начинаются с функции main, это такое правило
Ответ отправил: Sema (статус: 2-ой класс)
Ответ отправлен: 28.07.2007, 11:44
Отвечает: Терсков Сергей
Здравствуйте, Чирков Вячеслав Александрович!
Ответов уже конечно много, но все таки они не совсем соответствуют действительности. Действительно формат функции main четко обозначен в стандарте. Но как же тогда быть с функциями типа WinMain? Подробнее по этой теме смотрите статью на RSDN:
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 31.07.2007, 03:25
Вопрос № 96.696
Здравствуйте! Я написал скрипт на С++ в среде C++Builder6.0 скомпилировал получился файл с расширением *.exe У меня сайт на платном хосте, сервер работает под ОС Linux. Проблемма в том, что я не могу скомпилировать файл *.cpp используя доступ SSH, дело в том что я просто не знаю как это делать. На сервере используется компилятор g++ для ssh доступа я использую программу Putty. Устанавливаю соединение открывается консоль с запросом логинаи пороля, ввожу логин с паролем, а что дальше делать я не знаю. Куда ложить
файл *.cpp который надо скомпилировать? Что писать в кансоле?
Есть ещё один вопрос. Как выставить прова у файла на сервере?
Подскажите что делать?
Отвечает: estiGi
Здравствуйте, Грибанов Фёдор Александрович!
чтобы просто скомпилировать, наберите в консоли следующее:
g++ -o output_file source_file.cpp
библиотеки подключаются ключом -l, причем имя либы урезается спереди и сзади - спереди убирается суффикс lib, сзади расширение. Т.е. если у вас файл использует либу libtest.a, то будет так:
g++ -o output_file source_file.cpp -L. -ltest
Ключ -L указывает, где искать библиотеку, потому что компилятор ищет только в стандартных путях. В данном случае -L. означает искать в текущей директории.
Для понятия подключения объектных файлов, динамических библиотек и т.п. самых распространненных опций компилятора скачайте этот файлик:
http://www.advancedlinuxprogramming.com/alp-folder/alp-ch01-advanced-unix-programming-with-linux.pdf, глава 1.2 Compiling with GCC.
И вообще, почитайте эту книгу, там очень многое изложено в кратких и содержательных формах. Вот оригинал, можно свободно качать: http://www.advancedlinuxprogramming.com/alp-folder. А вообще советую купить ее. Она стоит копейки, но информации для базовой работы с линухом там более чем, очень рекомендую. Вот она в русском варианте: http://www.williamspublishing.com/Books/Lnd_AdvLinuxProgramming.html
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 30.07.2007, 22:59