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

Ошибка компилятора C2360 - C++

Восстановить пароль Регистрация
 
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
04.01.2013, 08:39     Ошибка компилятора C2360 #1
Здравствуйте,форумчане)
Я тут переделываю загрузчик модели,чтобы мог не один начальный меш загрузить,а все,которые есть на сцене.В итоге пользуюсь контейнером vertex.
Значит,если кто не знает,в формате .3ds всё разбито оп блоком(бинарное всё)Эти блоки я определяю switch'ем.
Вот кусок кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 case 0x4100:
              Mesh mesh;
            unsigned short numVerts, numTris,nTexCoord;
         break;
         case 0x4110:
             fread (&numVerts, sizeof (unsigned short), 1, f);
             Vertex vert;
              for (i=0; i<numVerts; i++)
            {   
        
               fread (&(vert.m_Pos.x), sizeof(float), 1, f);
               fread (&(vert.m_Pos.z), sizeof(float), 1, f);
               fread (&(vert.m_Pos.y), sizeof(float), 1, f);
               mesh.m_Verts.push_back(vert);
               
            }
             break;
Ошибка вылетает конечно из-за инициализации Mesh mesh; Vertex vert; и там дальше ещё подобные объявления есть.
Я знаю что избавиться можно взяв эти объявления в блок.Но мне-то нужно чтобы хотя бы Mesh была глобальна и создаваться он должны каждый раз при нахождении блока 0x4100.
Так как же обойти эти блоки?
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2013, 08:39     Ошибка компилятора C2360
Посмотрите здесь:

C++ ошибка компилятора
C++ Ошибка компилятора
Ошибка: error C2360: initialization of 'mat_C' is skipped by 'case' label C++
C++ Ошибка компилятора
C++ Ошибка компилятора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iifat
2179 / 1332 / 96
Регистрация: 05.06.2011
Сообщений: 3,692
04.01.2013, 11:12     Ошибка компилятора C2360 #2
Вот это вот
Цитата Сообщение от Justix Посмотреть сообщение
Mesh mesh;
-- описание переменной для компилятора, понимаешь? Компилятор -- он весь работает до запуска программы, понимаешь? Если тебе хоть в каком-то случае нужна переменная -- значит, компилятору надо сказать, что она в принципе существует и предусмотреть способ сообщить программе, есть там, в ней, какая-то полезная информация, или нет.
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
04.01.2013, 13:55  [ТС]     Ошибка компилятора C2360 #3
So what?

Добавлено через 31 минуту
Я поставил Mesh в глобальные перед свитчем,а остальное в блоки засунул,вроде работает...но!
C++
1
2
3
4
5
6
7
void Model3D::draw()
{
       for ( unsigned int i = 0; i < m_Meshes.size(); ++i )
       {
        RenderMesh( m_Meshes[i] );<-----ВОТ здесь вылетает
       }
}
Почему вылетает-то?
m_Meshes.size() == 1
iifat
2179 / 1332 / 96
Регистрация: 05.06.2011
Сообщений: 3,692
04.01.2013, 14:08     Ошибка компилятора C2360 #4
So -- описание переменной mesh выносим перед switch куда-нить и предусматриваем либо подходящую инициализацию, эквивалентную отсутствию, буде такое возможно, либо признак присутствия/отсутствия.
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
04.01.2013, 14:14  [ТС]     Ошибка компилятора C2360 #5
Цитата Сообщение от iifat Посмотреть сообщение
So -- описание переменной mesh выносим перед switch куда-нить и предусматриваем либо подходящую инициализацию, эквивалентную отсутствию, буде такое возможно, либо признак присутствия/отсутствия.
С этим разобрался,новая ошибка,смотрите выше)
iifat
2179 / 1332 / 96
Регистрация: 05.06.2011
Сообщений: 3,692
04.01.2013, 14:38     Ошибка компилятора C2360 #6
Не знаю, я с этим не работал. Одно могу сказать точно: не строчку надо постить, а нерабочую прогу как минимум. По непонятно как сформированным данным никто тебе причину не назовёт.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
04.01.2013, 14:41     Ошибка компилятора C2360 #7
Цитата Сообщение от iifat Посмотреть сообщение
Одно могу сказать точно: не строчку надо постить, а нерабочую прогу как минимум.
И не коды ошибок, а их полный текст.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2013, 13:46     Ошибка компилятора C2360
Еще ссылки по теме:

C++ Непонятная ошибка компилятора
C++ Непонятная ошибка компилятора
(+ - % / *) ошибка математики компилятора? C++

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

Или воспользуйтесь поиском по форуму:
Justix
 Аватар для Justix
73 / 19 / 1
Регистрация: 26.04.2012
Сообщений: 233
05.01.2013, 13:46  [ТС]     Ошибка компилятора C2360 #8
Ну ок...вот кусок класса код с данным...
C++
1
2
3
4
5
6
7
8
9
10
11
      struct Mesh
              {
             
               VertexList      m_Verts;
               TriangleList    m_Tris;
               TexCoordList    m_Tex;
               GLuint          m_TexID;
              
             };
            typedef std::vector<Mesh> MeshList;
            MeshList            m_Meshes;
Добавлено через 2 минуты
И я вообще не понимаю что в том коде не понятно?Ну есть контейнер m_Meshes,ну размер у него один,тобишь элементов 1 всего,ну пытаюсь я к нему обратиться а он ошибку выдаёт..

Добавлено через 2 часа 15 минут
Вот весь класс
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
class Model3D{ 
    public:
        Model3D(){}
        unsigned int IdTex;
        char Name[255];
        char NameM[255];
        unsigned short num;
        unsigned short *face_nums;
 
              struct Vertex
              {
                glm::vec3   m_Pos;
              };
              typedef std::vector<Vertex> VertexList;
 
              struct Triangle
              {
                 short  m_Indices[3];
              };
              typedef std::vector<Triangle> TriangleList;
              
              struct TexCoord
              {
                glm::vec2   m_Coord;
              };
              typedef std::vector<TexCoord> TexCoordList;
 
              struct Mesh
              {      
               VertexList      m_Verts;
               TriangleList    m_Tris;
               TexCoordList    m_Tex;              
             };
            typedef std::vector<Mesh> MeshList;
            MeshList            m_Meshes;
 
            void RenderMesh( const Mesh& mesh );
            void draw();
            void LoadMeshFrom3DS(const char *file,const char *filetex);
 
      };
А это функция загрузки,надеюсь всё это поможет разобраться...=\
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
void Model3D::LoadMeshFrom3DS(const char *file,const char *filetex)
{
    FILE *f;
    unsigned short id,buuf;
    unsigned int len;
    unsigned char l_char;
    int i = 0;
        if ((f=fopen (file, "rb"))== NULL)   
      {
        MessageBox(NULL, 0, L"Ne ydalos onkrit model!", MB_OK); 
        exit(1);
  }; 
Mesh mesh;      
unsigned short numVerts, numTris,nTexCoord;      
while(ftell(f)<filelength(fileno(f))){
      fread (&id, 2, 1, f); 
      fread (&len, 4, 1, f); 
      switch (id)
      {
         case 0x4d4d: 
         break;
         case 0x3d3d:
         break;
         case 0x4000:
            do
            {
               fread (&l_char, 1, 1, f);
               Name[i]=l_char;
               i++;
            }while(l_char != '\0');
         break;
         case 0x4100:
         break;
         case 0x4110:
        {    fread (&numVerts, sizeof (unsigned short), 1, f);
             Vertex vert;
              for (i=0; i<numVerts; i++)
            {   
        
               fread (&(vert.m_Pos.x), sizeof(float), 1, f);
               fread (&(vert.m_Pos.z), sizeof(float), 1, f);
               fread (&(vert.m_Pos.y), sizeof(float), 1, f);
               mesh.m_Verts.push_back(vert);
               
            }
        }
             break;
         case 0x4120:
             {
             fread (&numTris, sizeof (unsigned short), 1, f);
             Triangle tri;
              for (i=0; i<numTris; i++)
            {         
               fread (&tri.m_Indices[0], sizeof(short), 1, f);
               fread (&tri.m_Indices[1], sizeof(short), 1, f);
               fread (&tri.m_Indices[2], sizeof(short), 1, f);
               fread (&buuf, sizeof(short), 1, f);  
               mesh.m_Tris.push_back(tri);
            }
             }
             break;
              case 0x4130:
             i=0;
             do
            {
               fread (&l_char, 1, 1, f);
               NameM[i]=l_char;
               i++;
            }while(l_char != '\0');
             fread (&num, sizeof (unsigned short), 1, f);
             face_nums = new unsigned short[num];
              for (i=0; i<num; i++)
            {       
               fread (face_nums, sizeof(unsigned short), 1, f); 
              }
             break;
 
         case 0x4140:
             {
              fread (&nTexCoord, sizeof (unsigned short), 1, f);
               TexCoord Tex;
              for (i=0; i<nTexCoord; i++)
            {         
               fread (&Tex.m_Coord.x, sizeof(float), 1, f);
               fread (&Tex.m_Coord.y, sizeof(float), 1, f);  
               mesh.m_Tex.push_back(Tex);
            }
             }
           // PrepareNormals(mesh);
            m_Meshes.push_back(mesh);
 
             break;
              default:
            fseek(f, len-6, SEEK_CUR);
      }
 
}
fclose(f);
 
 
}
Добавлено через 20 часов 28 минут
Аааааааааааап
Yandex
Объявления
05.01.2013, 13:46     Ошибка компилятора C2360
Ответ Создать тему
Опции темы

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