Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
yur@
7 / 7 / 3
Регистрация: 06.03.2014
Сообщений: 106
1

Передача переменной в функцию

11.12.2015, 00:28. Просмотров 344. Ответов 13

Здравствуйте. Подскажите пожалуйста как сделать следующее:

есть класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
#include "Point2d.h"
#include <vector>
#include "Figure.h"
 
void render(void);
 
class WDraw
{
public:
 
    WDraw(void);
    virtual ~WDraw(void);
    
    virtual void drawSegment(std::vector<Figure*> figures);
    std::vector<Figure*> figuresDraw;
};
есть реализация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
....
void WDraw::drawSegment(std::vector<Figure*> figures) {
    char *argv = new char[512];
    GetModuleFileNameA(0, argv, 512);
    int argc = 1;
    for (std::size_t i = 0; i<figures.size(); ++i)
        figuresDraw.push_back(figures[i]);
    glutInit(&argc, &argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(640, 640);
    glutCreateWindow("Some name");
     
    glutDisplayFunc(render);
 
    glutMainLoop();
}
 
void render(void){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    /*double coeff = 2 / 640;
    for (std::size_t i = 0; i<figuresDraw.size(); ++i)
    {
        figuresDraw[i]->draw(coeff);
    }
    for (std::size_t i = 0; i<figuresDraw.size(); ++i)
        delete figuresDraw[i];*/
    glutSwapBuffers();
}
...
мне нужно передать в функцию render переменную

C++
1
std::vector<Figure*> figuresDraw;
сам метод render нельзя заносить внутрь класса WDraw.

Добавлено через 37 минут
Up!

Добавлено через 43 минуты
Up!

Добавлено через 1 час 8 минут
Up!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2015, 00:28
Ответы с готовыми решениями:

Передача переменной из функции в функцию
#include &lt;iostream&gt; #include &lt;fstream&gt; // работа с файлами #include &lt;iomanip&gt;...

Передача переменной в лямбда-функцию по значению
Ребят! А объясните, что тут происходит, позязя :). function&lt;int()&gt; f()...

Передача значения переменной-члена из класса в функцию
Добрый день, имеется класс: class ZernPole{ ...

Передача значения и передача переменной
объясните мне разницу...и с кодами пожалуйста...думаю передача значений это...

Передача массива в функцию используя указатель на функцию
У меня имеется готовая программа без передачи функции в функцию указателем, мне...

13
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
11.12.2015, 00:32 2
C++
1
void render(std::vector<Figure*> &);
в чем проблема?
0
nonedark2008
1119 / 829 / 247
Регистрация: 28.07.2012
Сообщений: 2,322
11.12.2015, 00:32 3
Цитата Сообщение от yur@ Посмотреть сообщение
Up!
От этого твой вопрос не станет понятнее.
Где вызывается метод render? Почему его нельзя заносить в класс?
0
yur@
7 / 7 / 3
Регистрация: 06.03.2014
Сообщений: 106
11.12.2015, 00:45  [ТС] 4
_Valera_, nonedark2008, он вызывается в файле WDraw.cpp. Его нельзя заносить по той причине что я использую openGL в функции drawSegment, а именно
C++
1
glutDisplayFunc(render);
а если я занесу его в класс то получу ошибку
Код
аргумент типа "void (WDraw::*)()" несовместим с параметром типа "void (*)()"
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
11.12.2015, 00:49 5
Цитата Сообщение от yur@ Посмотреть сообщение
а если я занесу его в класс то получу ошибку
покажи как заносишь, сформулируй нормально вопрос, ничего не ясно
0
yur@
7 / 7 / 3
Регистрация: 06.03.2014
Сообщений: 106
11.12.2015, 00:58  [ТС] 6
_Valera_, допустим так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma once
#include "Point2d.h"
#include <vector>
#include "Figure.h"
 
class WDraw
{
 
public:
 
    WDraw(void);
    virtual ~WDraw(void);
    void render(void);
    /************************************************************************/
    /* Основной метод отрисовки                                             */
    /************************************************************************/
    virtual void drawSegment(std::vector<Figure*> figures);
 
private:
    std::vector<Figure*> figuresDraw;
};
Соответственно сама функция имеет след. вид
C++
1
2
3
void WDraw::render(void){
    ...
}
И тогда на строке
C++
1
glutDisplayFunc(render);
имею описанную выше ошибку, так как glutDisplayFunc принимает указатель на функцию, которая будет отвечать за рисование в окне (в стандартном виде void glutDisplayFunc(void (*func)(void)); )
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
11.12.2015, 01:03 7
Цитата Сообщение от yur@ Посмотреть сообщение
имею описанную выше ошибку, так как glutDisplayFunc принимает указатель на функцию, которая будет отвечать за рисование в окне (в стандартном виде void glutDisplayFunc(void (*func)(void)); )
мда, без отладки не разобраться, тем более что я с этим не работал.
А если render(void) сделать дружественной?
1
yur@
7 / 7 / 3
Регистрация: 06.03.2014
Сообщений: 106
11.12.2015, 01:06  [ТС] 8
_Valera_, спасибо) просто с плюсами не очень часто работаю так не знаю всех особенностей) а friend я так понимаю не достает же до private переменных?
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
11.12.2015, 01:08 9
Цитата Сообщение от yur@ Посмотреть сообщение
а friend я так понимаю не достает же до private переменных?
как раз она и достает, а что сработало?
0
yur@
7 / 7 / 3
Регистрация: 06.03.2014
Сообщений: 106
11.12.2015, 01:14  [ТС] 10
_Valera_, все, разобрался) спасибо еще раз

Добавлено через 36 секунд
Да, вроде как. Сейчас полностью проверю.

Добавлено через 4 минуты
_Valera_, а там же нет никаких больших особенностей как я понимаю в friend? Это правильная запись?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class WDraw
{
 
public:
 
    WDraw(void);
    virtual ~WDraw(void);
    
    /************************************************************************/
    /* Основной метод отрисовки                                             */
    /************************************************************************/
    virtual void drawSegment(std::vector<Figure*> figures);
    
private:
    friend void render(void);
    std::vector<Figure*> figuresDraw;
};
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
11.12.2015, 01:16 11
Цитата Сообщение от yur@ Посмотреть сообщение
а там же нет никаких больших особенностей как я понимаю в friend?
в принципе нет.

Цитата Сообщение от yur@ Посмотреть сообщение
Это правильная запись?
да, но может ее паблик сделать?!
0
yur@
7 / 7 / 3
Регистрация: 06.03.2014
Сообщений: 106
11.12.2015, 01:19  [ТС] 12
_Valera_, то я случайно) извиняюсь) а в функции мне к figuresDraw надо обращаться через экземпляр класса получается?
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
11.12.2015, 01:21 13
Цитата Сообщение от yur@ Посмотреть сообщение
а в функции мне к figuresDraw надо обращаться через экземпляр класса получается?
нет, читай больше про функции
http://cppstudio.com/post/8423/
1
yur@
7 / 7 / 3
Регистрация: 06.03.2014
Сообщений: 106
11.12.2015, 01:22  [ТС] 14
_Valera_, спасибо за помощь. Сейчас углублюсь)
0
11.12.2015, 01:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2015, 01:22

Передача указателя на шаблонную функцию в другую функцию
Пишу тест для нескольких улучшений квиксорта с измерением времени. Функция...

Передача объекта в функцию или функцию друга
Здравствуйте, уважаемые программисты :) К примеру есть такой код. #include...

Передача двухмерного массива из функцию в функцию
Допустим у меня есть функция, в которой &quot;генерируется&quot; массив. Но нужно его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru