Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
nazarg
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 21
#1

Проблемка с ООП и OpenGl - C++

11.05.2013, 23:32. Просмотров 744. Ответов 13
Метки нет (Все метки)

Привет!Проблемка с ООП и OpenGl. Может ли быть, что OpenGl не видят мои созданые функции из-за использования в них обектов класа?если да, то как можно исправить ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2013, 23:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Проблемка с ООП и OpenGl (C++):

ООП в с++ и OpenGL
Пытаюсь написать код для упрощения работы с OpenGL #include "stdafx.h"...

Проблемка
#include "stdafx.h" #include <math.h> #include <iostream> int _tmain(int...

Проблемка
Доброго всем времени суток. Подскажите,что это за ошибка и что не так? //...

Проблемка с g++
Вот недавно установил винду (раньше была линь), и хотел чтоб всё было привычно,...

Проблемка с exit
Пример из книги. #include <iostream> #include <iomanip> //...

Проблемка с указателями
Нужно перегрузить "+" чтобы он делал слияние 2ух массивов(элементы не...

13
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
11.05.2013, 23:47 #2
Что значит "OpenGL не видят" ?
0
nazarg
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 21
11.05.2013, 23:52  [ТС] #3
вот к примеру в мейне есть "glutDisplayFunc(Draw)".функцию Draw компилятор считает неоприделенной, хотя она определина, но в ней используються обекты класа
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
11.05.2013, 23:56 #4
Мне кажется мы так никогда "не придем к общему знаменателю" ...
Покажи код.
0
nazarg
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 21
12.05.2013, 00:07  [ТС] #5
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
H файл:
 
  #pragma once
#include <cmath>
#include <GL/glut.h>
class Point
{
protected:
    int N;    
    int x;
    int y;
    int z;
    int mastab;
 
public:
    Point(void);
    Point(int N,int x,int y,int z);
    ~Point();
 
    const Point & Point::operator = (const Point & Point);
 
    Point( const Point &Point);
    void Draw();
};
    void Initialize();
    void Timer();
 
 
 
class Pointsoon: public Point
{
    
    int ANgle_;
 
public:
    
    Pointsoon( const Pointsoon& Point ) ;
    Pointsoon(int ANgle_);
    ~Pointsoon();
 
    const Pointsoon & Pointsoon::operator = (const Pointsoon & Point);
    
    void Vvod();
    void SKeyboard(int key, int x, int y);
};
    void  Povorot();
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
срр файл:
 
#include "Point.h"
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
#include <cmath>
#include <GL/glut.h>
 
 
float WinWid=700.0;
float WinHei=700.0;
float Angle=0.0, Scale=1.0;
 
const double M_PI =3.1415926535898;
 
 
void Pointsoon::Vvod()
{
    setlocale(LC_ALL,"");
    printf("-------Намалювати багатокутник-------");
    printf("\nКiлькiсть граней: ");
    scanf_s("%d", &N);
 
    printf("\n*******Перемiщення фiгури*******");
    printf("\nx = ");
    scanf_s("%d", &x);
    
    printf_s("\ny = ");
    scanf_s("%d", &y);
    
    printf("\nz = ");
    scanf_s("%d", &z);
    
    printf("\nМасштаб = ");
    scanf_s("%d", &mastab);
 
    printf("\nВведтiь кут повороту:");
    scanf_s("%d", &ANgle_);
       
    printf("\n*******Задайте колiр фiгури*******");
    
    char ch;
    do
    {
        puts("");
        puts("1-Чорний");
        puts("2-Червоний");
        puts("3-Зелений");
        puts("4-Жовтий");
        puts("5-Синiй");
        puts("6-Пурпурний");
        puts("7-Блакитний");
        puts("8-Бiлий");
        puts("ESC-vuhod");
        ch=_getch();
    }
    while((ch>'8'||ch<'1')&&ch!=27);
    switch(ch)
    {
        case '1':glColor3f(0.0, 0.0, 0.0); break;
        case '2':glColor3f(1.0, 0.0, 0.0); break;
        case '3':glColor3f(0.0, 1.0, 0.0); break;
        case '4':glColor3f(1.0, 1.0, 0.0); break;
        case '5':glColor3f(0.0, 0.0, 1.0); break;
        case '6':glColor3f(1.0, 0.0, 1.0); break;
        case '7':glColor3f(0.0, 1.0, 1.0); break;
        case '8':glColor3f(1.0, 1.0, 1.0); break;
    }
    _getch();
 
}
 
void Timer(int value)
{
      //Draw();
        glutPostRedisplay();
        glutTimerFunc(50, Timer, 0);
}
 
Pointsoon::Pointsoon( int ANgle_)
    :Point (N, x, y, z)
{
    this ->ANgle_ = ANgle_;
}
 
Pointsoon::Pointsoon( const Pointsoon& Point ) 
    : Point( Point )
{
    ANgle_ = Point.ANgle_;
}
 
Pointsoon:: ~Pointsoon()
{
 
}
 
void Pointsoon::SKeyboard(int key, int x, int y)
{
    for( ; ANgle_ > 0; ANgle_--)
        switch(key)
        {
        case GLUT_KEY_LEFT: Angle++;
                break;
        case GLUT_KEY_RIGHT: Angle--;
                break;
        }
}
 
void Initialize()
{
        glClearColor(0.0, 0.0, 0.0, 1.0);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(-WinWid/2, WinWid/2, -WinHei/2, WinHei/2, -200.0, 200.0);
        glMatrixMode(GL_MODELVIEW);
}
 
Point::Point(int N, int x, int y, int z)
{
    this ->N = N;
    this ->x = x;
    this ->y = y;
    this ->z = z;
    this ->mastab = mastab;
 
}
 
 
Point::Point(const Point&Point)
{
    N = Point.N;
    x = Point.x;
    y = Point.y;
    z = Point.z;
    mastab = Point.mastab;
}
 
Point:: ~Point()
{
 
}
 
void inform()
{
    void Vvod();
}
 
 
void Point:: Draw()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    Scale = mastab - abs(sin(3.14*Angle/90.0)/sqrt(3.0)/2);
    glTranslated(x , y, z);         
    glRotatef(Angle, 0.0, 0.0, 1.0);
    glScalef(Scale, Scale, 1.1);
 
    glLineWidth(2);
    glBegin(GL_LINE_LOOP);
    
    for (int i = 0; i < N; ++i)
        for (int j = i + 0.5; j < N; ++j)
        {
            glVertex2f(cos(2 * M_PI * i  / N), sin(2 * M_PI * i / N));
 
        }
    glEnd();
    glPopMatrix();
    glutSwapBuffers();
}
 
void Drawing()
{
    void Draw();
}
 
void Povorot()
{
     void SKeyboard();
}
 
int main(int argc, char **argv)
{   
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
        glutInitWindowSize(WinWid, WinHei);
        glutInitWindowPosition(300, 200);
        glutCreateWindow("Mnogogrannik");
        
        inform();
        Initialize();
 
        glutInitWindowSize(1000, 1600);
        glutDisplayFunc(Drawing);
        glutTimerFunc(50, Timer, 0);
       // glutSpecialFunc(Povorot);
        glutMainLoop();
 
        return 0;
}

здесь прада я попробовал вызвать функции класа глобальными функциями
0
castaway
Эксперт С++
4926 / 3033 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
12.05.2013, 00:14 #6
А где определение класса?
0
nazarg
0 / 0 / 0
Регистрация: 26.12.2012
Сообщений: 21
12.05.2013, 00:21  [ТС] #7
где должно быть?
0
FreeMan108
121 / 121 / 32
Регистрация: 04.03.2013
Сообщений: 370
12.05.2013, 00:27 #8
C++
1
2
3
4
5
void Drawing ()
{
Point pt;
pt.Draw();
}
Добавлено через 1 минуту
Да, кст. пишите всю реалезацию класса в файле h/hpp.
1
silent_1991
Эксперт С++
5007 / 3066 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
16.05.2013, 14:45 #9
Цитата Сообщение от FreeMan108 Посмотреть сообщение
Да, кст. пишите всю реалезацию класса в файле h/hpp.
Обосновать сможете?
0
FreeMan108
121 / 121 / 32
Регистрация: 04.03.2013
Сообщений: 370
17.05.2013, 23:18 #10
Цитата Сообщение от silent_1991 Посмотреть сообщение
Обосновать сможете?
Простое отделение инерфейса от реализации. Например, если вы используете стандартный класс для работы со строками - string, то вы же не определяете в нем описание всех функций, их описание идет отдельно.
Вообще, в этом и заключается главное преимущество классов - его могут использовать и другие программисты.
0
silent_1991
Эксперт С++
5007 / 3066 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
17.05.2013, 23:24 #11
FreeMan108, я, может, чего-то не понял, но вы в своём предыдущем сообщении порекомендовали писать реализацию в заголовочных файлах, т.е. делать вещи, противоположные этому:
Цитата Сообщение от FreeMan108 Посмотреть сообщение
отделение инерфейса от реализации
Цитата Сообщение от FreeMan108 Посмотреть сообщение
Вообще, в этом и заключается главное преимущество классов - его могут использовать и другие программисты.
Это не в тему, поскольку отделять объявление от реализации (объявление в h, реализация в cpp) или нет (и объявление, и реализация в h), класс в любом случае можно использовать извне.
0
FreeMan108
121 / 121 / 32
Регистрация: 04.03.2013
Сообщений: 370
18.05.2013, 13:36 #12
В данном проекте было два файла - h и cpp. Вся реализация функций была в исполняемом файле cpp, что является неправильным. Нужно было создавать файл hpp, где определен класс с реализацией всех его функций или же создавать файл h, где будут прототипы функций, а их описание в файле dll.
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
18.05.2013, 14:37 #13
2FreeMan108 Вам стоит почитать что такое раздельная компиляция и тогда вы поймете зачем нужны заголовочные файлы ( *.h, *.hpp ) и файлы исходных текстов ( *.с, *.cpp ). Причем компилятору c++ (тоже и для компилятора с) все равно расширение *.c или *.cpp (*.h или *.hpp) если код будет написан корректно с точки зрения выбранного языка.
1
silent_1991
Эксперт С++
5007 / 3066 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
18.05.2013, 18:07 #14
Цитата Сообщение от FreeMan108 Посмотреть сообщение
В данном проекте было два файла - h и cpp. Вся реализация функций была в исполняемом файле cpp, что является неправильным.
Как раз это и является правильным.
Цитата Сообщение от FreeMan108 Посмотреть сообщение
или же создавать файл h, где будут прототипы функций, а их описание в файле dll
А dll откуда возьмётся? Аист в клюве принесёт? Его же надо откомпилировать из чего-то.
Короче говоря, прислушайтесь к совету stima, почитайте про раздельную компиляцию.
1
18.05.2013, 18:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2013, 18:07
Привет! Вот еще темы с решениями:

Небольшая проблемка)
Всем доброго времени суток, у меня возникла проблема с напиванием одной...

В чем проблемка?
Сделал метод итерации, но програма после компиляции как бегущая строка... в чем...

Проблемка с инициализацией
Допустим есть такой класс. Работаем именно с классом Temp, в котором указатель...

Проблемка с массивом
Всем привет, в общем у меня такая задача: в целочисленном массиве после каждых...


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

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

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