Название: Создаю библиотеку формата *.а Отправлено: tiiL от Март 22, 2012, 14:08 Создаю библиотеку грубо говорят библиотека состоит из двух основных файлов
plot_fat.cpp: Код: #include <mainwindow.h> // здесь объявленна plot_first mainwindow.h: Код: #ifndef MAINWINDOW_H и вылезают такие ошибки: In file included from ..\..\Qt\2010.05\qt\include/QtCore/qshareddata.h:1, from ..\..\Qt\2010.05\qt\include/QtCore/../../src/corelib/tools/qsharedpointer.h:47, from ..\..\Qt\2010.05\qt\include/QtCore/qsharedpointer.h:1, from ..\..\Qt\2010.05\qt\include/QtGui/../../src/gui/image/qpixmap.h:49, from ..\..\Qt\2010.05\qt\include/QtGui/qpixmap.h:1, from ..\..\Qt\2010.05\qt\include/QtGui/../../src/gui/painting/qbrush.h:53, from ..\..\Qt\2010.05\qt\include/QtGui/qbrush.h:1, from ..\..\Qt\2010.05\qt\include/QtGui/../../src/gui/kernel/qpalette.h:47, from ..\..\Qt\2010.05\qt\include/QtGui/qpalette.h:1, from ..\..\Qt\2010.05\qt\include/QtGui/../../src/gui/kernel/qwidget.h:49, from ..\..\Qt\2010.05\qt\include/QtGui/qwidget.h:1, from ..\..\Qt\2010.05\qt\include/QtGui/../../src/gui/dialogs/qdialog.h:45, from ..\..\Qt\2010.05\qt\include/QtGui/qdialog.h:1, from ..\..\Qt\2010.05\qt\include\QtGui/../../src/gui/dialogs/qmessagebox.h:45, from ..\..\Qt\2010.05\qt\include\QtGui/qmessagebox.h:1, from ..\..\Qt\2010.05\qt\include\QtGui/QMessageBox:1, from ./mainwindow.h:8, from plot_fat.cpp:28: ..\..\Qt\2010.05\qt\include/QtCore/../../src/corelib/tools/qshareddata.h:165: error: expected identifier before '(' token и этих ошибок 233 штуки. как быть и что делать? Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Март 22, 2012, 14:12 обратить внимание на указанные строки
Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 22, 2012, 14:44 обратил внимание, они берутся из стандартных библиотек QT, mainwindow.h это файл из отдельного приложения файлы, которого я включил в библиотеку, которую я создаю, приложение то работает отлично(
Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Март 22, 2012, 14:45 from ./mainwindow.h:8,
from plot_fat.cpp:28: ити строки не из стандартных библиотек Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 22, 2012, 15:15 в этих строках написанно
28-ая строка : #include "mainwindow.h" 7-ая строка #include <qmainwindow.h> Название: Re: Создаю библиотеку формата *.а Отправлено: V1KT0P от Март 22, 2012, 15:19 в этих строках написанно Выложи минимальный проект с ошибкой, скорее всего где-то толи скобку не поставил, толи точку с запятой...28-ая строка : #include "mainwindow.h" 7-ая строка #include <qmainwindow.h> Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 22, 2012, 15:30 да всё что есть я выложил в первом посте :(
Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Март 22, 2012, 15:35 да всё что есть я выложил в первом посте :( Если взять это "все, что есть", то оно не скомпилируется ни у кого К тому же, как соотносятся между собой функции int plot_fat ( int spec_qty, SPEC_DATA *s, CURVE *c ) и void MainWindow::plot_fat(); ? Что за функция n= plot_first("передаются какие то параметры вычисления") и где она описана? Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 22, 2012, 15:47 отвечаю: была задача написать приложение которое рисует графики, а потом включить это приложение в библиотеку.
При написание программы для рисования графиков старался максимально приблизиться к структуре библиотеки, для того чтобы подключая приложение в библиотеку убирать переобъявление функции(в данном случаи plot_fat() ). plot_first описанна в моем графическом приложении : Код: int MainWindow::plot_first (double AxisXmax, double AxisXmin, double AxisYmax, double AxisYmin, double errorX, double *x, double *y, const int N, int numberCurve) компилятор ругается в тот момент когда я в файле plot_fat(), пытаюсь include <mainwindow.h> и пошло поехало по всем инклудам... на сами функции не ругается... Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Март 22, 2012, 15:51 plot_fat.cpp: Код: #include <mainwindow.h> // здесь объявленна plot_first plot_fat не является членом MainWindow. почему она вызвает plot_first без объекта класса MainWindow? Выложи проект, который можно скачать и попробовать скомпилировать Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 23, 2012, 08:27 Выкладывать очень много придетья, чтобы облегчить отладку сделал вот так
создал программу, поместив в неё функцию plot_fat() из основной программы, а свою программу grathQWT собираю как статическую библиотеку. Код: #include <QtCore/QCoreApplication> grathQWT: Код: #include "mainwindow.h" появилась ошибка main.cpp:45: error: cannot call member function 'int MainWindow::plot_first(double, double, double, double, double, double*, double*, int, int)' without object Название: Re: Создаю библиотеку формата *.а Отправлено: lighting от Март 23, 2012, 09:11 появилась ошибка main.cpp:45: error: cannot call member function 'int MainWindow::plot_first(double, double, double, double, double, double*, double*, int, int)' without object Собственно о чем тебе mutineer и говорил в предыдущем сообщенииНазвание: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 23, 2012, 09:41 Цитировать появилась ошибка main.cpp:45: error: cannot call member function 'int MainWindow::plot_first(double, double, double, double, double, double*, double*, int, int)' without object Собственно о чем тебе mutineer и говорил в предыдущем сообщении Хорошо, но как бороться с этой ошибкой ? Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Март 23, 2012, 11:31 Цитировать появилась ошибка main.cpp:45: error: cannot call member function 'int MainWindow::plot_first(double, double, double, double, double, double*, double*, int, int)' without object Собственно о чем тебе mutineer и говорил в предыдущем сообщении Хорошо, но как бороться с этой ошибкой ? Способ борьбы с этой ошибкой очень стар и очевиден - идти учить C++ Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 23, 2012, 13:22 Спасибо, за тапок в рыло!
Название: Re: Создаю библиотеку формата *.а Отправлено: Пантер от Март 23, 2012, 13:24 Спасибо, за тапок в рыло! Это была очень даже мягкая рекомендация.Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Март 23, 2012, 13:25 ну а что еще можно ответить на попытку вызова нестатической функции в виде MainWindow::plot_first(...); извне этого класса?
Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 23, 2012, 13:36 показали новичку что вы опытнее. а сказать как вызвать(сделать) функцию правильно это уже , извените, наверно не в вашей компетентности. Извените что вообще потревожил вас!
Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Март 23, 2012, 13:38 показали новичку что вы опытнее. а сказать как вызвать(сделать) функцию правильно это уже , извените, наверно не в вашей компетентности. Извените что вообще потревожил вас! Знать, как вызывать функцию - обязанность новичка, и писать код без этого знания имхо пустая трата времени. А чтобы узнать как это сделать правильно достаточно прочитать любую книгу по плюсам Название: Re: Создаю библиотеку формата *.а Отправлено: Bepec от Март 23, 2012, 14:07 Приходи ещё, ещё накидаем :)
Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 23, 2012, 14:07 MainWindow window(NULL);
n = window.fplot_first(); так надо вызывать? в таком виде компилируется собирается но при запуске ничего не происходит :( а при отладке так вообщ вылетает ошибка during startup program exited code 0x0000135 Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Март 23, 2012, 14:10 MainWindow window(NULL); n = window.fplot_first(); так надо вызывать? в таком виде компилируется собирается но при запуске ничего не происходит :( а при отладке так вообщ вылетает ошибка during startup program exited code 0x0000135 А что должно было произойти? в main у тебя сплошные рассчеты, и вывод результатов в невидимое окно. window.show() покажет окно на экран Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 23, 2012, 14:45 не могу выложить программу размер говорит большой(
а вот что пишит QT Запускается C:\media\plot_fat\debug\plot_fat.exe... C:\media\plot_fat\debug\plot_fat.exe завершился с кодом -1073741515 Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 29, 2012, 13:55 с выше изложенными проблемами разобрался... теперь эту библиотеку подключаю, к проекту...
вылезли вот такие ошибки: Код: ../grathQWT/debug/libgrathQWT.a(mainwindow.o): In function `MainWindow': Код: #include <QtGui/QApplication> что приложение к которому идёт подключение библиотеки, основой является класс QMainWindow Код: class MainWindow : public QMainWindow и моё библиотечное приложение идёт как Код: class MainWindow : public QMainWindow и из-за этого множественное объявление, может быть такое или нет? Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Март 29, 2012, 13:57 У тебя два раза объявляется класс MainWindow. Как ты думаешь, если класс объявлен два раза, может ли это быть причиной множественного объявления? Вот просто с точки зрения русского языка
Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 29, 2012, 14:02 Цитировать тебя два раза объявляется класс MainWindow. Как ты думаешь, если класс объявлен два раза, может ли это быть причиной множественного объявления? Вот просто с точки зрения русского языка ну значит можно решить проблему переименовав class в одном из приложений, правильная мысль? Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Март 29, 2012, 14:07 именно
Название: Re: Создаю библиотеку формата *.а Отправлено: popper от Март 29, 2012, 20:27 для самообразования можно ознакомиться с исходниками библиотеки qwt (благо она под рукой) и попытаться там отыскать наследника от QMainWindow. Если есть желание перенести часть функционала в библиотеку, то нужно хотя бы представлять, что это такое
Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Март 30, 2012, 12:41 подскажите пожалуйста, что означает эта строчка x = NEWM ( n, double )?
Название: Re: Создаю библиотеку формата *.а Отправлено: kambala от Март 30, 2012, 14:35 подозреваю, что этот макрос создаёт динамический массив типа double размера n, но тебе нужно просто найти его в коде (нажать ф2 на него в креаторе)
Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Апрель 04, 2012, 13:40 подозреваю, что этот макрос создаёт динамический массив типа double размера n, но тебе нужно просто найти его в коде (нажать ф2 на него в креаторе) Спасибо за ответ. разобрался. Возник вопрос: из приложения вызываю функцию в этой вункции я пишу: MainWindow Window; Window.plot_first(); Window.show (); когда я запускаю весь процесс то вот когда доходит до plot_first() - появляется окошко в котором должно происходить рисование и сразу исчезает. Почему оно исчезает? Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Апрель 04, 2012, 13:41 Потому что Window локальная переменная и уничтожается при выходе из функции
Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Апрель 04, 2012, 14:10 Потому что Window локальная переменная и уничтожается при выходе из функции Блин так и думал, будь любезен подскажи тогда как решить эту задачу? руки опускаются( Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Апрель 04, 2012, 14:12 Потому что Window локальная переменная и уничтожается при выходе из функции Блин так и думал, будь любезен подскажи тогда как решить эту задачу? руки опускаются( Не делать Window локальной переменной. А если так и думал, то мог и сам решить, а не на форум идти Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Апрель 04, 2012, 14:17 То есть надо сделать её глобальной?
то есть объявить её вне функции? Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Апрель 04, 2012, 14:57 ну хоть носом ткните куда читать... и что именно читать!
Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Апрель 04, 2012, 14:58 блин, за эти 40 минут мог бы уже попробовать свои предположения воплотить в коде и посмотреть!
Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Апрель 04, 2012, 15:11 за эти 40 минут пытался найти ответ в книжке Джесс Либерти - Освой самостоятельно С++ за 21 день,
и единственная мысля это сделать так, что пока не нажмётся кнопка close в приложении, которое запускается то не закрывать окно, но как реализовать это - я не знаю( Название: Re: Создаю библиотеку формата *.а Отправлено: Пантер от Апрель 04, 2012, 15:16 за эти 40 минут пытался найти ответ в книжке Джесс Либерти - Освой самостоятельно С++ за 21 день, Освой самостоятельно нейрохирургию за 21 день...и единственная мысля это сделать так, что пока не нажмётся кнопка close в приложении, которое запускается то не закрывать окно, но как реализовать это - я не знаю( Название: Re: Создаю библиотеку формата *.а Отправлено: mutineer от Апрель 04, 2012, 15:17 Ошибка у тебя - создаешь окно локальной переменной в функции. Что именно ты хочешь сделать я не знаю. Объясни задачу
Пантер угу http://comicsia.ru/i/4a/f4-19188.png Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Апрель 04, 2012, 15:31 моя задача :
основное приложение через которое загружается базаданных, и функция по обработке данных; эта функция описанна в бибилиотеке, когда функция заканчивает обработку базы данных, вызывает функцию отрисовки данных которые обработала( рисует графики); функцию отрисовывающая графики, описанна в моем приложении, которое я собрал как еще одну библиотеку. в идеале выгледет так загружаем базу данных -> получаем графики неких функций. а получается загружаю базу данных всё пролетает мгновенно и ничего не понятно. как вы сказали я объявляю локально, как мне реализовать всё это? Название: Re: Создаю библиотеку формата *.а Отправлено: tiiL от Апрель 06, 2012, 09:18 Разобрался со своими ошибками.
объявив в функции свой класс : MainWindow *Window = new MainWindow; но теперь моё окно с графикой открывается на заднем фоне, существует ли какиенить флаги, чтобы окно было поверх окон, ну или чтонить типо тогО? |