Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > ошибки кода на cpp builder 6


Автор: kshyms 12.2.2012, 17:32
Код

#include <iostream.h>
#include <algorithm>



int main()
{
string  URL_DOWNLOAD = "http://www.сайт.com" ;
string FILE_NAME = "m.txt";
TFileStream *FILE_STREAM = new TFileStream(FILE_NAME, fmCreate | fmOpenWrite);
IdHTTP1->Get(URL_DOWNLOAD, FILE_STREAM);
   delete FILE_STREAM;
  return 0;
}


[C++ Error] File1.cpp(11): E2451 Undefined symbol 'TFileStream' Неопределенный символ
[C++ Error] File1.cpp(11): E2451 Undefined symbol 'FILE_STREAM' Неопределенный символ
[C++ Error] File1.cpp(11): E2303 Type name expected Введите ожидаемое имя
[C++ Error] File1.cpp(11): E2379 Statement missing ;Без вести пропавшее заявление
[C++ Error] File1.cpp(12): E2451 Undefined symbol 'IdHTTP1' Неопределенный символ
[C++ Error] File1.cpp(13): E2158 Operand of 'delete' must be non-const pointer
Почему не работает эта программа?

Автор: Dem_max 12.2.2012, 17:57
потому что это должно выглядеть примерно так
Код

#include <vcl.h>
#include <iostream.h>
#include <algorithm>



int main()
{
string  URL_DOWNLOAD = "http://www.сайт.com" ;
string FILE_NAME = "m.txt";
TFileStream *FILE_STREAM = new TFileStream(FILE_NAME.c_str(), fmCreate | fmOpenWrite);
IdHTTP1->Get(URL_DOWNLOAD, FILE_STREAM);
    delete FILE_STREAM;
  return 0;
}

Автор: Artemon 12.2.2012, 17:57
#include <fstream>

Код

#include <vcl.h>


должно помочь


Автор: Данкинг 12.2.2012, 17:58
Цитата(kshyms @  12.2.2012,  18:32 Найти цитируемый пост)
Без вести пропавшее заявление

Кошмар какой. smile 
Цитата(kshyms @  12.2.2012,  18:32 Найти цитируемый пост)
Почему не работает эта программа?

Я так понимаю, ты этот кусок откуда-то выдрал и пытаешься вставить в Билдер.

Автор: Artemon 12.2.2012, 18:00
К  томуже в Bulder строки помоему типа AnsiString

Автор: Dem_max 12.2.2012, 18:02
Цитата

К  томуже в Bulder строки помоему типа AnsiString

Наплевать какие строки

Автор: kshyms 12.2.2012, 21:06

Код

IdHTTP1->Get(URL_DOWNLOAD, FILE_STREAM);

Выдает [C++ Error] File1.cpp(12): E2451 Undefined symbol 'IdHTTP1'Неопределенный символ

Автор: Artemon 12.2.2012, 21:09
Насколько я понимаю это компонент, который должен лежать на форме или должен быть создан в коде пред использованием.

Скорее всего у вас не выполняется ни первое ни второе условие.

Автор: kshyms 12.2.2012, 21:11
Данкинг, 
1 этап копирование кода (частичное или полное в зависимости от задачи )
2 этап копирование с модификацией 
3 этап собственно программирование (компоновка, отладка и оптимизация кода в зависимости от задачи )
А кто то еще знает как еще?

Добавлено @ 21:12
Artemon, а без формы ни как нельзя?

Автор: Artemon 12.2.2012, 21:19
Можно и без формы, но для этого придется вам создать прямо в коде нужный компонент IdHTTP1.

Какой у него тип я не помню (можете посмотреть на закладке Indy), но вот псевдокод:

Код

ТИП* IdHTTP1 = new ТИП();



Автор: kshyms 12.2.2012, 21:27
http://codup.blogspot.com/2011/05/blog-post.html 

http://radio-hobby.org/modules/news/article.php?storyid=490 может это подойдет TIdHTTP и TIdHTTPServer

Type* IdHTTP1 = new Type();

Автор: Artemon 13.2.2012, 07:15
TIdHTTP* IdHTTP1 = new TIdHTTP();

Автор: kshyms 13.2.2012, 07:42
Artemon,  ошибок нет но и не записывает в файл строку
Код

#include <vcl.h>
#include <iostream.h>
#include <algorithm>



int main()
{
string  URL_DOWNLOAD = "http://www.сайт.ru" ;
string FILE_NAME = "1.txt";

   TIdHTTP* IdHTTP1 = new TIdHTTP();
TFileStream *FILE_STREAM = new TFileStream(FILE_NAME.c_str(), fmCreate | fmOpenWrite);
new TIdHTTP()->Get(URL_DOWNLOAD, FILE_STREAM);
    delete FILE_STREAM;
  return 0;
}

Автор: Artemon 13.2.2012, 08:15
На первый взгляд все должно работать, попробуйте явно указать путь к файлу:

string FILE_NAME = "C:\\1.txt";

и перед удаленимем файлового потока поставьте строку:

Sleep(1500); //give TFileStream time to write remaining buffer bytes

Автор: kshyms 10.9.2012, 13:33
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include <tchar.h>
//---------------------------------------------------------------------------
#include <algorithm>
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{

AnsiString  URL_DOWNLOAD = "http://www.мойсайт.com" ;
AnsiString FILE_NAME = "E:\\1.txt";
TFileStream *FILE_STREAM = new TFileStream(FILE_NAME.c_str(), fmCreate | fmOpenWrite);
IdHTTP1->Get(URL_DOWNLOAD, FILE_STREAM);
    Sleep(1500); //give TFileStream time to write remaining buffer bytes
    delete FILE_STREAM;
  return 0;
}



//---------------------------------------------------------------------------


Итак пока не выходит [BCC32 Error] File3.cpp(22): E2451 Undefined symbol 'IdHTTP1' т.е. неопределённый символ

Автор: xvr 11.9.2012, 11:33
Цитата(kshyms @  10.9.2012,  13:33 Найти цитируемый пост)
Итак пока не выходит [BCC32 Error] File3.cpp(22): E2451 Undefined symbol 'IdHTTP1' т.е. неопределённый символ

У меня одного дежавю? 

Цитата(Artemon @  12.2.2012,  21:19 Найти цитируемый пост)
Можно и без формы, но для этого придется вам создать прямо в коде нужный компонент IdHTTP1.


Автор: kshyms 11.9.2012, 18:43
 Indy Clients      Содержит компоненты клиентских приложений Internet Direct (Indy), дающих доступ             к                             различным протоколам Internet из приложений Delphi, C++ Builder и Kylix
   Indy Servers      Содержит компоненты серверных приложений Internet Direct
  Indy Mask      Различные вспомогательные компоненты приложений Internet Direct
Имеется ввиду библиотеки и дописать код используя эти компоненты, который из них может этот 
 Indy HTTP Client а может http://articles.org.ru/cfaq/index.php?qid=2982 скорее всего TIdTelnet

Автор: kshyms 12.9.2012, 21:08
Код


    //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 #pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
#include <algorithm>
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{

AnsiString  URL_DOWNLOAD = "http://сайт.ru" ;
AnsiString FILE_NAME = "E:\\1.txt";



 IdHTTP1->Host = "smtp.сайт.ru";
 IdHTTP1->Port = 2525;
 IdHTTP1->Connect();
 TFileStream *FILE_STREAM = new TFileStream(FILE_NAME.c_str(), fmCreate | fmOpenWrite);
Id IdHTTP1->Get(URL_DOWNLOAD, FILE_STREAM);
    Sleep(1500); //give TFileStream time to write remaining buffer bytes
    delete FILE_STREAM;


  return 0;
}



Код


    //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 #pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
#include <algorithm>
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{

AnsiString  URL_DOWNLOAD = "http://сайт.ru" ;
AnsiString FILE_NAME = "E:\\1.txt";



 IdTelnet1->Host = "smtp.сайт.ru";
 IdTelnet1->Port = 2525;
 IdTelnet1->Connect();
 TFileStream *FILE_STREAM = new TFileStream(FILE_NAME.c_str(), fmCreate | fmOpenWrite);
Id IdTelnet1->Get(URL_DOWNLOAD, FILE_STREAM);
    Sleep(1500); //give TFileStream time to write remaining buffer bytes
    delete FILE_STREAM;


  return 0;
}



Варианты 1 и 2, но какого-то компонента не хватает.

Автор: xvr 12.9.2012, 21:42
Вам Artemon уже писал, как надо сделать *причем дважды), и вы даже сделали. Но видимо уже забыли, т.к. это было давно  smile 

Вот http://forum.vingrad.ru/index.php?showtopic=346977&view=findpost&p=2459533 и ниже

Автор: kshyms 13.9.2012, 18:44
INTERNET_DEFAULT_HTTP_PORT    Use the default port for HTTP servers (port 80). А может это и есть компонент winInet.

xvr, На любую постановку задачи есть множество решений
Я вычитал что на builder есть поддержка WinInet API

Автор: Dem_max 14.9.2012, 04:32
http://www.rsdn.ru/article/inet/wininet.xml
http://forum.sources.ru/index.php?showtopic=324736

Автор: xvr 14.9.2012, 09:22
Цитата(kshyms @  13.9.2012,  18:44 Найти цитируемый пост)
xvr, На любую постановку задачи есть множество решений

Есть конечно. Вот только 'постановки задачи' мы пока не видели - были разные попытки скомпилировать куски кода на Builder'е с применением разных компонентов Indy. Я так понял, что это и была исходная задача  smile 

Цитата

Я вычитал что на builder есть поддержка WinInet API
Есть, как и в любом С/С++ компиляторе на Windows.

Если вам просто надо скачать файл из Internet'а, то это можно сделать гораздо проще -
Код

#include <windows.h>
#include <urlmon.h>
#include <stdio.h>

int main(int argc, char** argv)
{
 if (argc<2) {puts("Usage: urlmon <URL>"); return 1;}
 
 HRESULT hr=URLDownloadToFile(NULL,argv[1],"outf.html",0,NULL);
 if (hr<0) printf("Error: %08X\n",hr);
 return 0;

}
Это под VS, но и Builder'е должно собраться (как консольный проект)

Автор: kshyms 16.9.2012, 17:06
//---------------------------------------------------------------------------

Код

#include <vcl.h>
#pragma hdrstop


#include <tchar.h>
//---------------------------------------------------------------------------
    #include <windows.h>
#include <urlmon.h>
#include <stdio.h>
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{

 string URL = ("http://forum.vingrad.ru/forum/topic-346977/kw-ошибки-кода-на-cpp-builder.html#st_15_view_0");
 if (argc<2) {puts("Usage: urlmon <URL>"); return 1;}

 HRESULT hr=URLDownloadToFile(NULL,argv[1],"outf.html",0,NULL);
 if (hr<0) printf("Error: %08X\n",hr);



    return 0;
}
//---------------------------------------------------------------------------


[BCC32 Error] File9.cpp(15): E2451 Undefined symbol 'string' Неопределенный символ 
[BCC32 Error] File9.cpp(15): E2379 Statement missing ;пропавшие заявление
Что не так может библиотеки и переменную не правильно прописал?

Добавлено через 6 минут и 3 секунды
Dem_max, спасибо за эту ссылку http://www.rsdn.ru/article/inet/wininet.xml полезная

Автор: xvr 16.9.2012, 19:25
Цитата(kshyms @  16.9.2012,  17:06 Найти цитируемый пост)
Что не так 

Вот это не так -
Код

string URL = ("http://forum.vingrad.ru/forum/topic-346977/kw-ошибки-кода-на-cpp-builder.html#st_15_view_0");
уберите эту строку вообще

Автор: kshyms 16.9.2012, 19:45
Код


#include <tchar.h>
//---------------------------------------------------------------------------
    #include <windows.h>
#include <urlmon.h>
#include <stdio.h>
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{


 if (argc<2) {puts("Usage: urlmon <URL>"); return 1;}

 HRESULT hr=URLDownloadToFile(NULL,argv[1],"outf.html",0,NULL);
 if (hr<0) printf("Error: %08X\n",hr);



    return 0;
}



[ILINK32 Error] Error: Unresolved external 'URLDownloadToFileA' referenced from D:\BACKUP\我的文档\RAD STUDIO\PROJECTS\DEBUG\FILE9.OBJ




Автор: xvr 17.9.2012, 09:43
Цитата(kshyms @  16.9.2012,  19:45 Найти цитируемый пост)
[ILINK32 Error] Error: Unresolved external 'URLDownloadToFileA' referenced from D:\BACKUP\我的文档\RAD STUDIO\PROJECTS\DEBUG\FILE9.OBJ

Добавьте библиотеку urlmon.lib в проект (она системная и должна уже быть на машине)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)