Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 421 • Страница 17 из 22<  1 ... 14  15  16  17  18  19  20 ... 22  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 09.07.2007
апять я са сваими ламерскими вапросами
есть у меня файл graph.cpp, в котором описано построение графика функции, соответственно, его заголовочный - graph.h;
а ещё есть файл functions.cpp, в котором описаны сами функции, его заголовок - functions.h.
как мне теперь из graph.cpp обратиться к функции, описанной в functions.cpp?
functions.cpp надо как-то подключить, или прописать?
или можт, я вообще неправильно мучу, и функции надо описывать в каком-то другом месте?



Партнер
 

Member
Статус: Не в сети
Регистрация: 05.12.2005
rcmonitor писал(а):
апять я са сваими ламерскими вапросами
есть у меня файл graph.cpp, в котором описано построение графика функции, соответственно, его заголовочный - graph.h;
а ещё есть файл functions.cpp, в котором описаны сами функции, его заголовок - functions.h.
как мне теперь из graph.cpp обратиться к функции, описанной в functions.cpp?
functions.cpp надо как-то подключить, или прописать?
или можт, я вообще неправильно мучу, и функции надо описывать в каком-то другом месте?


#include "functions.h"

В graph.cpp пропиши.


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
а массив из функций как сделать?
...типа есть несколько функций, графики которых надо строить, и надо сделать из них массив, чтоб обращаться типа f_x[i];


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
rcmonitor писал(а):
а массив из функций как сделать?
...типа есть несколько функций, графики которых надо строить, и надо сделать из них массив, чтоб обращаться типа 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.


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
чо-т я, паходу, апять не догнал:
functions.h:
Код:
class pFunc
  {
  public:
    double f_x_sqr(double x);
    typedef long (*func_ptr)(long);
    void function (void);

  };

functions.cpp:
Код:
double pFunc::f_x_sqr(double x)
{
return (pow(x, 2));
}

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.
}

видимо, я что-то где-то упускаю из виду.


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
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!


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
Alexous73
Если "Блидер" это Builder C++, то чем не нравиться соответствующая тема:
http://forums.overclockers.ru/viewtopic.php?t=49616
И не работающую программу в студию...


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
да, ты прав, паходу, я действительно не достаточно чётко ставлю вапрос.
в идеале, я хочу создать класс, содержащий несколько функций в виде структуры, так чтобы, создав член класса, обращаться к ним по порядковому номеру извне класса.
типа вот я сделал, как ты советуеш:
functions.h:
Код:
class pFunc
  {
  public:
    double f_x_sqr(double x);
    typedef double (pFunc::*func_ptr)(double);
    void Create (void);
  };

functions.cpp:
Код:
double pFunc::f_x_sqr(double x)
{
return (pow(x, 2));
}

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.
если что, пеши, надо тебя пивасом угостить.


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
rcmonitor
В таком случае ты можешь объявить в public разделе класса:
Код:
func_ptr* funcs;

Т.е твои указатели на функции, и заодно переменную n вынести, чтобы иметь представление о количестве таких функций.
Тогда ты сможешь писать:
Код:
pFunc *Func = new pFunc();
(Func->*funcs[0])(i);


rcmonitor писал(а):
если что, пеши, надо тебя пивасом угостить.

:beer:


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
вроде начал понимать смысл твоей идеи, но пока не всё гладко;
неемного подправил, вот что получается:
functions.h:
Код:
class pFunc
  {
  public:
    //double f_x_sqr(double x);
    typedef double (*func_ptr)(double x);   //pFunc::
    func_ptr* funcs;
    func_ptr f_x_sqr;
    void Create (void);
  };

functions.cpp:
Код:
double f_x_sqr (double x)
{
return (pow(x, 2));
}

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 секунды
а чо, пиво не катит?
давай на биллиарде погоняем...


 

sashar2 писал(а):
Alexous73
Если "Блидер" это Builder C++, то чем не нравиться соответствующая тема:
http://forums.overclockers.ru/viewtopic.php?t=49616
И не работающую программу в студию...


О, благодарю за отклик! А в студию - это как? Она же большая. На mail какой-то переслать или выжимку листинга здесь разместить?


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
Alexous73
Можно проект запаковать и выложить на какой-нибудь сервис, а можно и листинг - это будет даже лучше в том, случае, если он не такой большой.


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
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);

    return (int)funcs.size() - 1;
}

size_t pFunc::count_funcs()
{
    return funcs.size();
}

pFunc::func_ptr pFunc::get_func(int i)
{
    return funcs.at(i);
}

void pFunc::del_func(int i)
{
    funcs.erase(funcs.begin()+i);
}

double f_x_sqr(double x)
{
    return pow(x, 2);
}

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);
}


 

sashar2 писал(а):
Alexous73
Можно проект запаковать и выложить на какой-нибудь сервис, а можно и листинг - это будет даже лучше в том, случае, если он не такой большой.

Спасибо, я вдруг сам понял в чем дело. Заработало.


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
подскажите кто-нть плз, как работать с базами данных
например, есть файл *.xml/*.xls, или другой какой формат с данными
надо сделать таблицу для отображения/редактирования содержимого
нашол tdbgrid, а также tdadasetprivider и txmltransform,
но как эту всю хрень вместе связать - не догнал
в референсе написано, что tdbgrid надо ассоциировать
как это сделать?
ну и вообще, если есть ценные советы на эту тему - поделитесь


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
скинул на форму:
- DBGrid
- DataSource
- ClientDataSet
- XMLTransformProvider
в свойстве DataSet компонента DBGrid поставил DataSource1
DataSource1->DataSet = ClientDataSet1
ClientDataSet1->ProviderName = XMLTransformProvider1
XMLTransformProvider1->XMLDataFile = c:\...\test.xml
по идее, как написано в референсе, после ассоциирования DBGrid, в редакторе колонок должен стать активным пункт add all fields
но этого не происходит
что я делаю не так?


 

как правильно создавать списки в С++ в библиотеке <stdio.h>


 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
4aineg писал(а):
как правильно создавать списки в С++ в библиотеке <stdio.h>


typedef struct int_list{
int n;
int_list* next;
int_list* prev;
};
Это для двусвязного списка.
первое - значение элемента списка, второе и третье - указатели на следующий и предыдущий элемент.

_________________
memento mori


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
что еще за списки в stdio.h ?

если списки как структура данных, то надо пользоваться STL классом list, а не изобретать велосипед

#include <list>

...

std::list<int> int_list;


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 421 • Страница 17 из 22<  1 ... 14  15  16  17  18  19  20 ... 22  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan