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

Сигнал SIGABRT - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка во время компиляции http://www.cyberforum.ru/cpp-beginners/thread797479.html
Выбивает ошибку:"Run-Time Check Failure #3 - The variable 'n' is being used without being defined." Код:#include "stdafx.h" #include <iostream> #include <conio.h> #include <clocale> #include <math.h> using namespace std; int main() {
C++ Индексированные списки Получил следующее задание, и не могу понять сути... Задание прикрепил во вложении... Вот мой код: // obr.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <iomanip> #include <locale> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread797461.html
C++ Обнуление переменной
Здрасте. struct sItems { int ITEM_STRONG_LIFEPOWER; int ITEM_EXCELLENT_GENES; int ITEM_BOMB_SPECIALIST; int ITEM_DEMENTED_DOCTOR; int ITEM_FIRE_AND_CURSE; int ITEM_BATTLE_VETERAN;
C++ Перегрузка оператора
Имеется код: #include <iostream> class X { public: int a; int b; int operator+(int a) {
C++ Создать в производном классе метод Run http://www.cyberforum.ru/cpp-beginners/thread797454.html
Общая постановка. Программа должна содержать: • базовый класс Х, включающий два элемента х1, х2 типа int, • конструктор с параметрами для создания объектов в динамической области памяти, • деструктор, • виртуальные методы просмотра текущего состояния и переустановки объектов базового класса в новое состояние. • производный класс У, включающий один элемент у типа int , • конструктор с...
C++ Числа Фибоначчи dano celoe 4islo N(>0).posledovatel'nost' 4isel Fibona4i FK(celogo tipa) opredelyaet'sya sleduiuwim obrazom: F1=1,F2=1,FK=FK-2+FK-1,K=3,4,5,6... vyvesti elementy F1,F2,...FN подробнее

Показать сообщение отдельно
никита11я
 Аватар для никита11я
1 / 1 / 0
Регистрация: 09.01.2013
Сообщений: 13
27.03.2013, 12:16  [ТС]     Сигнал SIGABRT
Ошибка была из-за того, что вместо
C++
1
ofstream objFile;
надо было писать
C++
1
ifstream objFile;
.
Вот рабочий код класса загрузки .obj файлов:
Obj.cpp:
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
/*
 * Obj.cpp
 *
 *               Создано в: 27.02.2013
 *                   Автор: nikita
 *    Приложение создано в: Eclipse 3.8.0
 */
 
#include "obj.h"
using namespace std;
 
Obj::Obj(char *file) {
    File = file;//пишем адрес файла .obj
    empty[0] = ' ';//определяем пустую строку
    error = empty;//ошибки - пустая строка
}
 
Obj::~Obj() {
    File = empty;//адрес файла - пустая строка
    objFile.close();//закрыть обработчик файла
}
 
int Obj::objDraw()
{
    objFile.open(File, ios::out);//открыть наш файл .obj
    char command[20], i2, str;//command - массив куда мы будем помещать строки, прочитаные из файла
    int i = 0, i1 = 1, //i - количество точек(vertex), i1 - счетчик места в массиве,
            wasV = 0, //wasV - встречалась ли в файле v (v2.63),
            nowPoint; //nowPoint - текущая поверхность
    while(command[0] != 'f')
    {
        objFile >> command;//читаем файл и прочитанное помещаем в массив command
        if(command[0] == 'v')//если прочитано v
        {
            i++;//увеличить счетчик точек
        }
    }
    double VectorX[i], VectorY[i], VectorZ[i];//Vector - массив прочитанных точек
    objFile.seekg(0, ios::beg);//возвращаемся в начало файла
    objFile >> command;//читаем файл
    while(command[0] != 'f')//пока не встретилась f
    {
        objFile >> command;//читаем файл
        if(command[0] == 'v')//если прочитано v
        {
            if(wasV)//если v уже было
            {
                objFile >> VectorX[i1] >> VectorY[i1] >> VectorZ[i1]; //помещаем то, что после v в массив Vector
                i1++;//увеличиваем счетчик места в массиве
            }
            else{//если v не было
                wasV = 1;//сказать что v было
            }
        }
    }
    objFile.seekg(-1, ios::cur);//возвращаемся не строку до f
    while(objFile >> i2)//пока что-то есть в файле читаем букву f
    {
        glBegin(GL_POLYGON);//сообщаем OpenGL что мы собираемся рисовать многоугольник
        while(str != '\n')//пока не конец строки(пока пробел)
        {
            objFile >> nowPoint;//читаем файл и прочитанное помещаем в переменную nowPoint
            glVertex3d(VectorX[nowPoint], VectorY[nowPoint], VectorZ[nowPoint]);//рисуем точку
            objFile.get(str);////читаем файл и прочитанное помещаем в переменную str
        }
        glEnd();//сообщаем OpenGL что мы закончили рисовать
        str = ' ';//str это пробел
    }
    return 1;//рисование завершилось успешно
}
 
int Obj::printError()
{
    if(error == empty)//ошибки нет
    {
        return 0;//печать ошибки завершилось не успешно
    }
    cout << "Error - " << error;//напечатать в терминале(командной строке) ошибку
    error = empty;//ошибки теперь нет
    return 1;//печать ошибки завершилось успешно
}
obj.h:
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
/*
 * obj.h
 *
 *               Создано в: 27.02.2013
 *                   Автор: nikita
 *    Приложение создано в: Eclipse 3.8.0
 */
 
#ifndef OBJ_H
#define OBJ_H
#include <fstream>//класс обработки файлов
#include <iostream>//поток ввода-вывода
#include <GL/glut.h>//графическая библиотека
using namespace std;
 
class Obj {//создаем класс Obj
public:
    Obj(char *);//конструктор
    ~Obj();//деструктор
    int objDraw(void);//нарисовать загруженное
    int printError(void);//напечатать ошибку
private:
    char *File, *error;//File - адрес файла .obj, error - ошибка загрузки или отрисовки(если есть ошибка)
    ifstream objFile;//objFile - обработчик файла
    char empty[1];//empty - пустая строка вида " \0"
};
#endif
Демонстрационная программа:
tect.cpp:
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
#include <GL/glut.h>//графическая библиотека
#include "obj.h"//класс обработки .obj файлов
int xRot = 0, yRot = 0;//Rot - угол поворота
GLfloat fLightPos1[4]   = { -100.0f, 100.0f, 50.0f, 1.0f };//LightPos1 - позиция первой лампы
GLfloat fLightPos2[4]   = { 100.0f, -100.0f, -50.0f, 1.0f };//LightPos2 - позиция второй лампы
GLfloat fNoLight[] = { 0.0f, 0.0f, 0.0f, 0.0f };//NoLight - нет света
GLfloat fLowLight[] = { 0.25f, 0.25f, 0.25f, 1.0f };//LowLight - слабый свет
GLfloat fBrightLight[] = { 1.0f, 1.0f, 1.0f, 1.0f };//BrightLight - яркий свет
 
// Эта функция вызывается для отрисовки сцены
void RenderScene(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//отчистить цветовой буфер и буфер глубины
    glLightfv(GL_LIGHT0, GL_POSITION, fLightPos1);//рисуем первую лампу
    glLightfv(GL_LIGHT1, GL_POSITION, fLightPos2);//рисуем вторую лампу
    glEnable(GL_BLEND);//включаем смешение
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glPushMatrix();//помещаем в стек матрицу
    glRotatef(xRot, 1, 0, 0);//поворачиваем центр на Rot
    glRotatef(yRot, 0, 1, 0);
    Obj hun("/home/nikita/untitled.obj");//определяем файл .obj
    hun.objDraw();//рисуем изображение из файла
    glPopMatrix();//выталкиваем матрицу из стека
    glutSwapBuffers();//отправляем все на отрисовку
}
 
//Эта функция инициализирует все необходимые параметры
void SetupRC()
{
    glClearColor(fLowLight[0], fLowLight[1], fLowLight[2], fLowLight[3]);//цвет фона - слабый свет
    glCullFace(GL_BACK);//исключаем из отрисовки внутреную часть фигур
    glFrontFace(GL_CCW);//задаем ориентацию многоугольников против часовой стрелки
    glEnable(GL_CULL_FACE);//включаем действие функции glCullFace
    glEnable(GL_DEPTH_TEST);//включаем удаление скрытых поверхностей
    glEnable(GL_MULTISAMPLE_ARB);//включаем выравнивание
    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, fNoLight);//устанавливаем свет рассеянного освещения
    glLightfv(GL_LIGHT0, GL_AMBIENT, fLowLight);//для первой лампы рассеянный свет
    glLightfv(GL_LIGHT0, GL_DIFFUSE, fBrightLight);//для первой лампы направленный свет
    glLightfv(GL_LIGHT0, GL_SPECULAR, fBrightLight);//для первой лампы отраженный свет
    glLightfv(GL_LIGHT1, GL_AMBIENT, fLowLight);//для второй лампы рассеянный свет
    glLightfv(GL_LIGHT1, GL_DIFFUSE, fBrightLight);//для второй лампы направленный свет
    glLightfv(GL_LIGHT1, GL_SPECULAR, fBrightLight);//для второй лампы отраженный свет
    glEnable(GL_LIGHTING);//включаем освещение
    glEnable(GL_LIGHT0);//включаем первую лампу
    glEnable(GL_LIGHT1);//включаем вторую лампу
    glEnable(GL_COLOR_MATERIAL);//включить согласование цветов
    glColorMaterial(GL_FRONT_AND_BACK,//спереди и сзади у многоугольников рассеянный и направленный свет
            GL_AMBIENT_AND_DIFFUSE);//согласован с цветом определенным в glColor
    glMateriali(GL_FRONT_AND_BACK, GL_SHININESS,//спереди и сзади у многоугольников блестимость
            128);//равна 128
}
 
//Эта функция вызывается при нажатии на специальную (не символьную) клавишу
void SpecialKeys(int key, int x, int y)
{
    if(key == GLUT_KEY_UP)
    {
        xRot -= 5;
    }
    if(key == GLUT_KEY_DOWN)
    {
        xRot += 5;
    }
    if(key == GLUT_KEY_LEFT)
    {
        yRot -= 5;
    }
    if(key == GLUT_KEY_RIGHT)
    {
        yRot += 5;
    }
    if(key > 356)
    {
        xRot = 0;
    }
    if(key < -1){
        xRot = 355;
    }
    if(key > 356)
    {
        yRot = 0;
    }
    if(key < -1)
    {
        yRot = 355;
    }
    glutPostRedisplay();//перерисовать сцену
}
 
//Вызывается при изменении размера окна
void ChangeSize(int w, int h)
{
    GLfloat nRange = 100;
    if(h == 0)//предотвратить деление на ноль
    {
        h = 1;
    }
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    if (w <= h)
    {
        glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange);
    }
    else{
        glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);
    }
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}
 
//Функция вызывающаяся при запуске программы
int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutCreateWindow("OBJ class test");//название окна
    glutReshapeFunc(ChangeSize);//функция при изменении размера
    glutSpecialFunc(SpecialKeys);//функция при нажатии на клавишу
    glutDisplayFunc(RenderScene);//функция для отрисовки сцены
    SetupRC();//функция для инициализации параметров
    glutMainLoop();//запуск программы
    return 0;
}
 
Текущее время: 14:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru