Форум программистов, компьютерный форум CyberForum.ru

Функция как параметр метода класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Получение списка public свойств класса http://www.cyberforum.ru/cpp-beginners/thread376196.html
Имеется набор различных классов с различными количествами публичных текстовых свойств. Мне нужно эти поля редактировать. Как получить список публичных полей класса и определить тип данных поля, чтение/запись? Это вообще возможно?
C++ Двойной факториал Дано целое число N (> 0). Найти двойной факториал N: N!! = N·(N–2)·(N–4)·… (последний сомножитель равен 2, если N — четное, и 1, если N — нечет-ное). Чтобы избежать целочисленного переполнения, вычислять это произ-ведение с помощью вещественной переменной и вывести его как вещест-венное число. Эту задачу надо решить с помощью while. спасибо буду очень благодарен ;) http://www.cyberforum.ru/cpp-beginners/thread376192.html
C++ воспроизведение файла в программе
Может кто-нибудь знает как воспроизвести файл VOB или MPEG, или хотя бы какие классы для этого используются. А также как узнать размер, битрейт и тому подобное. Заранее спасибо.
C++ Вывести на экран содержимое файла с программой на С
Вывести на экран содержимое файла с программой на С, подсвечивая другим цветом все вещественные константы. ( и если можно закомментить всё)
C++ Помогите найти ошибку http://www.cyberforum.ru/cpp-beginners/thread376180.html
Сегодня начал изучать c++ и не могу найти ошибку вот задача //--------------------------------------------------------------------------- #include <vcl.h> #include <iostream.h>
C++ классы и сущность Написать программу с конструкторами и диструкторами, сущность мотоциклы... Кто знает как подскажите? есть какой нибудь пример похожий скиньте если не трудно подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
01.11.2011, 19:59     Функция как параметр метода класса
Цитата Сообщение от serginhold Посмотреть сообщение
Вообщем Qt, проект QWidget, создается по умолчанию класс Widget, в него сую функцию func()
C++
1
2
3
4
5
6
float func(float x); // h
...
float Widget::func(float x) // cpp
{
    return x*x;
}
В конструкторе Widget пишу это:
C++
1
2
3
4
5
canvas = new QLabel(this);
canvas->resize(500,500);
SGraph holst(500, 500, -10.0, 10.0, -10.0, 10.0);
holst.DrawGraphPixels(func); /* здесь ошибка постоянно, что не пиши в классе SGraph */
canvas->setPixmap(*holst.getPixmap());
В классе SGraph:
C++
1
2
3
4
5
//писать так
void SGraph::DrawGraphPixels( float func( float ) );
//или так
void SGraph::DrawGraphPixels( float (*func)( float ) );
//вообще без разницы, если в коде программы не вызывать эту функцию, то прекрасно все компилируется
НО
ошибка компиляции происходит если функцию вызывать именно в классе Widget
Если функцию вызвать в main.cpp, то почему то все работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <QtGui/QApplication>
#include "widget.h"
#include "SGraph.h"
 
float f(float x)
{
    return x*x;
}
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
 
    SGraph holst(500, 500, -10.0, 10.0, -10.0, 10.0);
 
    holst.DrawGraphPixels(f);
 
    w.show();
 
    return a.exec();
}
Я если честно разницы в коде вообще не вижу, то что main.cpp и в widget.cpp одно и тоже, но почему то во втором компилятор ругается вот так:
C++
1
2
1: no matching function for call to 'SGraph::DrawGraphPixels(<unresolved overloaded function type>)'
2: candidates are: void SGraph::DrawGraphPixels(float (*)(float))
В main вы вызываете функцию - не член класса. Поэтому никаких проблем нет. Ваша функция f это обычная внешняя функция. Как я понял, у вас имеется две функции с именем func - одна член класса, а другая внешняя функция. Вы уж как-то разберитесь, что вы хотите вызвать!

То есть, если я правильно понял, в конструкторе в том выражении, в котором вы вызываете функцию, нельзя ее вызывать без объекта класса Widget.
 
Текущее время: 08:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru