апять я са сваими ламерскими вапросами
есть у меня файл graph.cpp, в котором описано построение графика функции, соответственно, его заголовочный - graph.h;
а ещё есть файл functions.cpp, в котором описаны сами функции, его заголовок - functions.h.
как мне теперь из graph.cpp обратиться к функции, описанной в functions.cpp?
functions.cpp надо как-то подключить, или прописать?
или можт, я вообще неправильно мучу, и функции надо описывать в каком-то другом месте?
апять я са сваими ламерскими вапросами есть у меня файл graph.cpp, в котором описано построение графика функции, соответственно, его заголовочный - graph.h; а ещё есть файл functions.cpp, в котором описаны сами функции, его заголовок - functions.h. как мне теперь из graph.cpp обратиться к функции, описанной в functions.cpp? functions.cpp надо как-то подключить, или прописать? или можт, я вообще неправильно мучу, и функции надо описывать в каком-то другом месте?
а массив из функций как сделать?
...типа есть несколько функций, графики которых надо строить, и надо сделать из них массив, чтоб обращаться типа f_x[i];
а массив из функций как сделать? ...типа есть несколько функций, графики которых надо строить, и надо сделать из них массив, чтоб обращаться типа f_x[i];
Код:
typedef long (*func_ptr)(long); func_ptr* funcs = new func_ptr[n]; funcs[0] = f_x_sin; funcs[1] = f_x_cos; ...
В данном случае я объявил массив указателей на указатели функций возвращающих значение типа long и принимающих в качестве входного параметра тип long.
void pFunc::function () { int n = 10; func_ptr* funcs = new func_ptr[n]; funcs[0] = f_x_sqr; //pow(x,3); //пишет - member function must be called, or its adress taken. }
rcmonitor 1) Даже чисто по логике, ты объявил указатель на функцию, которую возвращает тип long и принимает в качестве параметра тоже long. Хотя тебе нужно указатель у которого тип параметра и возвращаемый тип - double.
2)
Код:
typedef long (*func_ptr)(long);
Этот объявление указателя не на функцию-член класса. Для того, чтобы объявить указатель на такую функцию нужно использовать следующую конструкцию:
Код:
typedef long (pFunc::*func_ptr)(long);
3) Даже с учетом всех исправлений эта строчка не скомпилируется:
Код:
funcs[0] = f_x_sqr;
Потому что в случае с указателями на функцию-член нужно использовать следующий синтаксис:
Код:
funcs[0] = &pFunc::f_x_sqr;
4) Наверняка будут проблемы и с вызовом функци... Если что ее нужно будет вызывать так:
(this->*funcs[0])(2);
Таким образом я вызвал функцию твою с входным параметром 2.
5) В следующий раз пожалуйста говори точнее, что тебе нужно сделать. А то в предыдущем посте у тебя просто класс ни слова...
У меня задача казалось бы простейшая, а вот не получается!
Нужно с помощью DragAndDrop в Билдере перетаскивать объекты кдасса Image из одного GroupBox в другой. Сделал по хелпам - не работает... SOS!
да, ты прав, паходу, я действительно не достаточно чётко ставлю вапрос.
в идеале, я хочу создать класс, содержащий несколько функций в виде структуры, так чтобы, создав член класса, обращаться к ним по порядковому номеру извне класса.
типа вот я сделал, как ты советуеш:
functions.h:
void pFunc::Create() { int n = 10; func_ptr* funcs = new func_ptr[n]; funcs[0] = &pFunc::f_x_sqr; //pow(x,3); }
и теперь, мне надо как-то обратиться к funcs[0] из, скажем, graph.cpp: я там создаю объект Func класса pFunc:
Код:
pFunc *Func;
и тут я могу просто обратиться к f_x_sqr:
Код:
Func->f_x_sqr(i);
, а мне надо так же, но по номеру: типа как ты писал: Func->funcs[0](i).
может, для этого надо использовать ещё один класс, используя pFunc как родительский?
просто мне ещё в функции надо параметры передавать; я думаю это делать через свойства.
кстати, ты мне уже который раз зачётно помогаеш, так что вот моя аська 196291903 и скайп: rcmonitor.
если что, пеши, надо тебя пивасом угостить.
void pFunc::Create() { int n = 10; //func_ptr* funcs = new func_ptr[n]; funcs[0] = f_x_sqr; //pow(x,3); pFunc:: }
, а в graph.cpp, соответственно:
Код:
Func->Create(); ymin = Func->funcs[0](xmin);
такое обращение юзаю потому, что при нажатии ">" билдер в подсказках сам выдаёт funcs в таком виде.
так вот, прога компилится, ворненгов нету, но при запуске и активации этого кода вылетает с ошибкой exception... как раз на этой строке. Добавлено спустя 8 минут, 34 секунды а чо, пиво не катит?
давай на биллиарде погоняем...
rcmonitor у тебя не выделяется память под массив funcs
void pFunc::Create()
{
int n = 10;
funcs = new func_ptr[n]; // добавь!
funcs[0] = f_x_sqr; //pow(x,3); pFunc::
}
ps
делать фунции Create() не принято, по смыслу это должно быть в конструкторе (и как параметр можно передать n), и в деструкторе нужно не забыть освободить массив funcs. Но вообще я бы че-нибудь типа такого написал:
Код:
#include <vector>
class pFunc { public: typedef double (*func_ptr)(double x); int add_func(func_ptr func); void del_func(int i); size_t count_funcs(); func_ptr get_func(int i);
func_ptr operator[](int i) {return get_func(i);}
private: std::vector<func_ptr> funcs; };
int pFunc::add_func(func_ptr func) { funcs.push_back(func);
void main(void) { pFunc funcs; int n = funcs.add_func(f_x_sqr); //.... pFunc::func_ptr func = funcs.get_func(n); func(10); // или можно напрямую вызывать funcs.get_func(n)(10); // или так funcs[n](10); }
подскажите кто-нть плз, как работать с базами данных
например, есть файл *.xml/*.xls, или другой какой формат с данными
надо сделать таблицу для отображения/редактирования содержимого
нашол tdbgrid, а также tdadasetprivider и txmltransform,
но как эту всю хрень вместе связать - не догнал
в референсе написано, что tdbgrid надо ассоциировать
как это сделать?
ну и вообще, если есть ценные советы на эту тему - поделитесь
скинул на форму:
- DBGrid
- DataSource
- ClientDataSet
- XMLTransformProvider
в свойстве DataSet компонента DBGrid поставил DataSource1
DataSource1->DataSet = ClientDataSet1
ClientDataSet1->ProviderName = XMLTransformProvider1
XMLTransformProvider1->XMLDataFile = c:\...\test.xml
по идее, как написано в референсе, после ассоциирования DBGrid, в редакторе колонок должен стать активным пункт add all fields
но этого не происходит
что я делаю не так?
Member
Статус: Не в сети Регистрация: 21.01.2004 Откуда: ядерная помойка
4aineg писал(а):
как правильно создавать списки в С++ в библиотеке <stdio.h>
typedef struct int_list{
int n;
int_list* next;
int_list* prev;
};
Это для двусвязного списка.
первое - значение элемента списка, второе и третье - указатели на следующий и предыдущий элемент.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения