Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вопросы по связанные с "читай мат.часть"
Форум на CrossPlatform.RU > Разработка > С\С++
Страницы: 1, 2
TiiL
программа написанная в DOC:

в начале кода всякие #define объявления

int    main(int argc , char** argv[]  ) // 1-ый - вариант
{
//int       argc;
//char    *argv; //2-ой - вариант


вопрос первый к выше написанному коду, как правильно записывать по 1-ому или 2-ому?

продолжение кода
...
идут объявление переменных и интерсует переменная term
...
int term;
...
проходят некие операции программы
...
term = KF_Next


KF_Next объявленно в одной из нестандартных библиотек:

 /*    перемещение по полям   */
...
#define KF_next (-132)
...

прочитал "мат часть":
Цитата
Директива #define позволяет задать имя для некоторого фрагмента текста, такое обозначение называется макроопределением или макросом. Формат записи: #define NAME Текст замены. Препроцессор просматривает текст программы и заменяет NAME текстом замены. Например: #define COUNT 100 в тексте программы все имена COUNT будут заменяться на 100.


-132 - это число которое передаеться в term, тогда причем здесь перемещение по полям?

ребята что может означать это число, ничего не понимаю.

Iron Bug
1. для main однозначно char *argv[]. тут не вопрос "как записывать", а определение main функции, так что без вариантов. это массив указателей на строки. впрочем, можно записать это как char ** argv. однако, обычно такая запись означает динамическое размещение, а в данном случае его нет. поэтому просто красивее писать как массив, ибо он имеет фиксированную длину.

2. да, -132 будет присвоено данной переменной. что означают какие-то "поля" - понятия не имею, надо разбираться в самом коде. к #define это никакого отношения не имеет.
TiiL
Спасибо что откликнулся.

другой вопрос в програмном коде записано вот так:
if ( F_open( argv [0], "tpp.flb") != 0)
    return fputs("cannot open form library 'tpp.flb'\n", stderr);


пробую заменить на
if ( std::ofstream( argv [0], "tpp.flb") != 0)
    return fputs("cannot open form library 'tpp.flb'\n", stderr);


понимаю что ошибка, но как правильно?

или надо это делать через:

is_open - проверка, открыт ли файл
Iron Bug
в данном случае ofstream - это конструктор. и он никогда ничего не возвращает.
правильно будет
ofstream ofs;
ofs.open(filename, mode);
if(ofs.is_open()) { ... }


но у ofstream режим (mode) открытия файла никак не может быть "tpp.flb". там вполне конкретные константы или их комбинация. и F_open не должен писать в массив аргументов argv (вообще нехорошо туда что-либо писать, да и незачем, по сути).
читать документацию на F_open и на ofstream::open.
TiiL
Iron Bug, Благодарю)))) вопросы еще будут, извените за мою тупость)
#include <fstream>
ofstream inputStream;


tpp_pr.cpp:122: error: 'ifstream' was not declared in this scope
что за глупость?
Iron Bug
ну вот сюда их все и пиши. чтобы темы от начинающих не плодились. а то обозревать кучу разных тем с вопросами по основам программирования на С++ очень проблематично :)
да, и прежде чем писать код - нужно читать документацию. а лучше начать с чтения книжки Страуструпа, чтобы упорядочить общие познания о языке. ну и в сети есть море примеров использования всякого всего. например, есть замечательный справочный ресурс по плюсам:
http://www.cplusplus.com/reference/
там есть поиск и можно найти и описания, и примеры.
TiiL
Спасибо за ссылочку будет полезной :rolleyes:
Цитата
замечательный справочный ресурс по плюсам:
http://www.cplusplus.com/reference/
там есть поиск и можно найти и описания, и примеры.

пользую вот этим
http://www.cppreference.com/wiki/ru/io/open
Litkevich Yuriy
Цитата(TiiL @ 7.10.2011, 18:28) *
tpp_pr.cpp:122: error: 'ifstream' was not declared in this scope
что за глупость?
надо заглянуть в файл fstream и посмотреть какое отношение имеет ifstream к ofstream
Алексей1153
Цитата
программа написанная в DOC:

а что это, если не секрет ? )
TiiL
Алексей1153,
Цитата
Цитата

программа написанная в DOC:

а что это, если не секрет ? )

Программа с экрана получала имя файла, в который записывает результаты расчета, и коэф-нт для этого расчета.

Litkevich Yuriy,

пробовал писать и ifstream и ofstream, ошибка таже самая, хотя в инете в примере

open

Синтаксис:
#include <fstream>
void fstream::open(const char *filename, openmode mode = default_mode);

Функция open() используется с файловыми потоками. Она открывает файл и связывает его с текущим потоком. Параметр mode по умолчанию имеет значение ios::in для потоков ввода (ifstream), ios::out для потоков вывода (ofstream) и ios::in|ios::out для файловых потоков (fstream). Если не удается вызов open(), то поток переходит в состояние non-good, которое может быть проверено.

Пример:
ifstream inputStream;
inputStream.open("file.txt");

if( !inputStream ) {
cerr << "Error opening input stream" << endl;
}
// или
if ( inputStream ) {
// использвование inputStream
}
всё должно работать, в чем же моя проблема((((
Алексей1153
TiiL, это чёрное окно называется консоль. С DOS она в винде не связана никак, разве что похожа текстовым интерфейсом
TiiL
Алексей1153, да просто написанно это было тогда когда виндоусов не было еще...
TiiL
Справился со своей синтаксической ошибкой
 std::ifstream inputStream;
  inputStream.open(...);

Теперь вылезает вот такое:
 undefined reference to `rd_open(char*)'


неопределена ссылка что это то может означать?

в коде :

#define     fname  argv[1]         /* Archive file name   */
#define     sname  argv[2]         /* Specimen's name     */
int    main(int argc, char **argv)
{
  
  int   fd;
  int           i;
  char          *s;
  struct ifl    itf [] =
       {{"GGC", 0}, {"SGC", 0}, {"HEADL", 0} };
double range;
int flage = 0, sort_flage;
char  string[256];
int   term;
float x;

  if ( argc < 2 )
    {
    fputs ( "bad spawn of gen processing", stderr );
    return 1;
    }

/* read items */

  int item_sz = sizeof ( itf ) / sizeof ( itf [0] );  /* Qty of items needed */

  if ( (fd = rd_open( fname)) < 0                /* get archive */
          || rd_fil(fd, &hdr)                   /* read file header */
          || rd_spec( fd, sname, &spec)          /* find&read specimen header */
     )
    return FATAL;
Iron Bug
Цитата(TiiL @ 7.10.2011, 18:28) *
tpp_pr.cpp:122: error: 'ifstream' was not declared in this scope
что за глупость?


а ты про пространство имён не забывай.
либо using namespace std, либо std::бла-бла-бла.
TiiL
Iron Bug, с этим я разобрался вот вопрос мой, который выше твоего сообщения, остаёться открытый.

rd_open определен в другом файле как
TiiL
Iron Bug, с этим я разобрался вот вопрос мой, который выше твоего сообщения, остаёться открытый.

rd_open определен в другом файле как


Iron Bug, с этим я разобрался вот вопрос мой, который выше твоего сообщения, остаёться открытый.

rd_open определен в другом файле, который я инклудю, как

extern FD rd_open(char* filename); /* readonly */

QT creator подсказывает, направляя на курсор на rd_open:

int rd_open( char* filename)

Вот не догоняю в чем причина? вообще не хочет компилиться(
Iron Bug
это значит, что он не понимает макроса FD и просто вместо него не видит никакого типа значения, возвращаемого из функции. а по умолчанию возврат - int, вот он и пытается предложить этот вариант.
TiiL
Iron Bug, Если я правильно понимаю, FileData это и есть FD, то есть я ему должен передать значени FD, то есть я должен дать ему файл?
Iron Bug
я хз, что там конкретно инклюдить надобно с этим rd_open. это вообще работа с драйвером RAM-диска под никсами? я с ним не работала, но у него совсем другие параметры: там вроде блоки и ещё что-то. а если это не обращение к драйверу, то, скорее всего, какой-то заголовочник не включен.
ты уточняй, какая ось, какой компилятор и что ты собираешь, собственно. а то непонятно, что это вообще и откуда.
TiiL
Разобрался! надо было всего то в файле .pro написать LIBS += /path/*.a прямую ссылку на библиотечный файл


Короче подключил всё что нужно всё комплиться но выдает вот такие ошибочки

E:\alexprojects\lib\debug\libsamum.a(dos_arch.o):dos_arch.cpp.data+0x8): multiple definition of `_fmode'

c:/qt/2010.05/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../libmingw32.a(txtmode.o):txtmode.c.data+0x0): first defined here
Ребята, как быть? что это значит?
Iron Bug
Цитата(TiiL @ 12.10.2011, 9:57) *
что это значит?

то и значит, что компилятор написал. ты читай текст-то!
написано: символ определён дважды. первый раз - тут: бла-бла-бла.
вот и думай, почему он у тебя дважды определён и как это разруливать, в соответствии с кодом и назначением данной переменной.
вообще, неплохо бы ещё обучиться поиском в гугле по номеру ошибки, если что непонятно. обычно в сети есть примеры и детальное объяснение всех ошибок для любого компилятора.
TiiL
да текст я прочитал... первел что два раза определяю _fmode, ну например, находит он только txtmode.o. А что с ним делать и как не пойму... :( Ладно буду ковыряться.

Извеняюсь за свою тупость.
Iron Bug
_fmode - дефолтный формат для файлов (текст или бинарник), глобальная переменная. и у тебя она в двух модулях определена. бери исходники, ищи эти определения, и правь так, чтобы осталось только одно.
TiiL
нашел _fmode в одном из файлов "своих" библиотеке dos_arch.cpp
int             _fmode = O_BINARY;


закоментировал его и всё заработало.

и теперь заключительный момент... как соединить два проекта:
1-ый tpp;
2-0й tpp_form:
форма диалогового окна, с которой берется имя файла вывода результата программы tpp, некое число для расчета программы tpp, запуск с программы tpp производиться с кнопки
void TPP::on_GoButton_clicked()

?
мысль такая весь проект консольный tpp, который состоит из
1-ое:
#include объявление множество файлов библиотек(хейдеров)
2-ое:
объявлений переменных так понимаю глобальных например
#define     fname  argv[1]         /* Archive file name   */
#define     sname  argv[2]         /* Specimen's name     */
3-ие:
int main(char argc, char **argv)
{
"код программы"
}

"код программы" поместить в tpp_form под функции int AppCons(void) и эту функцию вызывать по нажатию кнопки void TPP::on_GoButton_clicked(), тогда вопросы такие:
как быть char argc char **argv ?
и будут ли данные с формы занаситься в сам код программы для вычисления?

PS: если я выразился не понятно напишите что именно не ясно. буду интерпретировать вопрос. Спасибо за понимание!
PSS:Iron Bug, тебе отдельное спасибо, за терпение и ценные советы
Iron Bug
ты чего-то недопонимаешь во взаимодействии программы и интерфейса.
программа чётко определяет два параметра. а уж как там интерфейс их передаёт и откуда берёт - надо смотреть сам код интерфейса. оттуда и исходить.
TiiL
Задача такая:
из некого большого приложения через консоль запускается моя программа.
то есть в консоль записывается "имя.exe" "архив данных".sar и "название образца, лежащего в этом архиве".
я так понима в argc помещается "имя.exe" - c этим всё понятно.
в argv[1] argv[2] соотвественно архив и имя образца. Вопрос как argv[1] argv[2] поместить в fname и sname используемые под функции, находящейся в том же самом проекте, но в не в main.cpp, а в dialog.cpp? буду очень признательно, а пока читаю мат. часть. моджет что нарою.
Litkevich Yuriy
Цитата(TiiL @ 18.10.2011, 12:06) *
Вопрос как argv[1] argv[2] поместить в fname и sname используемые под функции, находящейся в том же самом проекте, но в не в main.cpp, а в dialog.cpp?
не понял связи между ними. Накидай схему того что у тебя есть, понагляднее.
TiiL
Спасибо отликнулись, но пока с этим проект отложен до лучших времен.

вопрос такой че то не вкуриваю как и что.
есть такое
Раскрывающийся текст

int main()
{
int file;
file = open("file.txt", O_CREAT | O_WRONLY);
if(file == -1){
    perror("error");

}
write(file,"Open File", strlen(" Openfile"));
close(file);
getch();
return 0;

}


какого примерно(требуется пример) записать write что бы в файл записывались значения sizeof или то что бы записывалось, точто происходит под read(fd, fil, sizeof(ZA_Fil))?

Iron Bug
если у тебя файл не открылся, то запись туда невалидна. надо делать выход после сообщения об ошибке.
TiiL
Iron Bug, ты непонял, всё работает нормально, нужен пример write чтобы в файл записывались данные например значение sizeof. вот как fprintf(file, " %d", sizeof); только чтобы было через write.
Iron Bug
Цитата(TiiL @ 18.11.2011, 19:29) *
всё работает нормально

нет. эта программа свалится, если по каким-то причинам не сможет создать файл. например, если нет прав его создавать в текущем каталоге.

касательно печати - sprintf и потом - write
TiiL
Iron Bug,
Цитата
касательно печати - sprintf и потом - write
не понял немножко поясни(
Iron Bug
а что тут непонятного? ты уже прочитал документацию на обе функции?
первая печатает в строку, вторая - из строки в файл.
TiiL
я слегка маневр не понял про печатает в строку а потмо эту строку записываю в файл
TiiL
Спасибо разобрался со всем...

появился вопрос такой :
    char* TPPout;
    TPPout = ui->OpenFileName->text();
    if( (df = fopen ( TPPout , "wt" )) == NULL )


вот так пытаюсь передать имя файла. ошибки

cannot convert 'QString' to 'char*' in assignment.

не догоняю как:
FILE *fopen(const char *filename, const char *mode)
как из ui->OpenFileName->text(); получить const char *filename.
OpenFileName это QLineEdit.

не догоняю как TPPout объявить?
sidsukana
qPrintable(QString);


В твоем случае это будет так

qPrintable(ui->OpenFileName->text());


Еще вот так можно:

QString filename = ui->OpenFileName->text();
char* fname = filename.toAscii().data();


Собственно 1 вариант это макрос на основе 2го.
TiiL
Спасибо помогло!!!!

TiiL
опять я со своими глупыми вопросами:
Раскрывающийся текст

int filelength (int fd)
{
    struct stat FileData;
    fstat(fd, &FileData);
    return FileData.st_size;
}


выдаетё ошибки

dos_linux.cpp: In function 'int filelength(int)':

dos_linux.cpp:11: error: new declaration 'int filelength(int)'

Решил проблему: написав int long filelength(int fd).

c:\qt\2010.05\mingw\bin\../lib/gcc/mingw32/4.4.0/../../../../include/io.h:297: error: ambiguates old declaration 'long int filelength(int)'

перевожу:
11: Ошибка: новое объявление filelength();
c:\qt\2010.05\mingw\bin\../lib/gcc/mingw32/4.4.0/../../../../include/io.h:297: error:смущает старое объявление.

что то не могу понять как с этим бороться?
Iron Bug
у тебя просто два раза определена одна и та же функция. убери одну копию.
TiiL
Ребята подскажите как справить с MAXFlOAT, #include<values.h> не помогает... я так понимаю это под unix вообще переменнная заточена, а как мне в win объявить максимальное значение с плавающей точкой?


Нашёл решение: взял values.h, вытащил из него #define MAXFLOAT 3.40282347E+38F
BRE
Цитата(TiiL @ 14.12.2011, 12:52) *
Нашёл решение: взял values.h, вытащил из него #define MAXFLOAT 3.40282347E+38F

Открой для себя http://www.cplusplus.com/reference/std/lim...numeric_limits/ и забудь о всяких константах. :)
TiiL
BRE, Ценный совет блогадарствую)


Ребят, чем или как заменить farcalloc? Функция уникальна для системы DOS.

Вроде как решил заменив на malloc.


появились следующие ошибки invalid conversion from 'void*' to 'float*'

REMALLOC ( f.Seqv, NE_TPP, float);

объявление :

# define REMALLOC(p, l, x) /**/ \
if (p) \
p = realloc ( p, sizeof(x) * l ); \
else \
p = ( x* ) (float*)malloc ( sizeof(x) * l )
# define REALLOC(x, n) if(x) x = realloc(x, n); else x = calloc(1, n)
Iron Bug
( x* ) (float*)- это что ещё за нафиг?
ViGOur
Цитата(Iron Bug @ 15.12.2011, 13:50) *
( x* ) (float*)- это что ещё за нафиг?
Это же макрос там и не так можно извратится! :)

Так будет работать и более читабельно:
# define REMALLOC(p, len, type) /**/ \
if (p) \
p = ( type* )realloc ( p, sizeof(type) * len ); \
else \
p = ( type* )malloc ( sizeof(type) * len );
TiiL
Добрый День, С прошедшими праздниками. И снова я со своими ошибками.

собираю проект, к нему подключаю библиотеки:
INCLUDEPATH +=../lib/
INCLUDEPATH +=../include/
INCLUDEPATH +=../cal_lib/
INCLUDEPATH +=../cal_include/

QMAKE_LIBDIR +=../cal_lib/debug/

LIBS += ../cal_lib/debug/libcal_lib.a\
../lib/debug/libsamum.a

выдаёт ошибки:

E:\works\alexproject\fatigue/fatigue.cpp:91: undefined reference to `rw_cur(char*, _iobuf*, _iobuf*)'

E:\works\alexproject\fatigue/fatigue.cpp:91: undefined reference to `rw_cst(char*, _iobuf*)'

E:\works\alexproject\fatigue/fatigue.cpp:91: undefined reference to `rw_jnt(char*, _iobuf*)'

хедеры где объявлены rw_cur и т.д. вставляю через include.

получается коды:
мой проект:
if ( rw_cur ( cfile, fd_res, fd_res_a )
    || rw_cst ( c_s_file, fd_res )
    || rw_jnt ( c_j_file, fd_res )
     )


хедерфайл:
extern int rw_cur ( char * c_file, FILE * fd_res, FILE * fd_res_a );
extern int rw_cst ( char * c_s_file, FILE * fd_res );
extern int rw_jnt ( char * c_j_file, FILE * fd_res );

в чем я нахомутал?

BRE
Цитата(TiiL @ 13.1.2012, 10:18) *
в чем я нахомутал?

Линкер тебе говорит, что он не может найти реализацию этих функций.
Iron Bug
Цитата
LIBS += ../cal_lib/debug/libcal_lib.a\
../lib/debug/libsamum.a

вот это - это не две строки, а ОДНА. потому что перенос без пробелов. линкер это воспринимает как один путь до библиотеки и в итоге не видит ни того, ни другого файла.
TiiL
Цитата(Iron Bug @ 14.1.2012, 13:22) *
Цитата
LIBS += ../cal_lib/debug/libcal_lib.a\
../lib/debug/libsamum.a

вот это - это не две строки, а ОДНА. потому что перенос без пробелов. линкер это воспринимает как один путь до библиотеки и в итоге не видит ни того, ни другого файла.

Так попробовав вариант:

LIBS +=../path/
LIBS +=../path1/


Так и так не получается(

Как еще можно присоединить библиотеки?
Iron Bug
да ты там просто пробел поставь. чтобы у тебя было две строки, а не одна.
TiiL
Iron Bug, Спасибо.

Поясните мне, пожалуйста, такую вещь maxVаlue() - это верхний предел интервала(переводил magic Gooddy) или это максимальноя значение?

есть width() про него пишут возвращает ширину интервала, ширина недействительных интервалов 0.0, иначе результат MaxValue().

Смогу ли я с помощью этих двух функций сделать getmaxx()(возвращает максимальную координату значение х экрана) ?

Или, извените, я вообще велосипед придумываю? тогда помогите пожалуйста...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.