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

Ошибка: идентификатор не найден - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
TBAPb
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 33
20.05.2013, 13:24     Ошибка: идентификатор не найден #1
Добрый день. При отладки вот этот код
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
#include <iostream>
#include <freeglut/freeglut.h>
#include <glui/glui.h>
#include <Box2D\Box2D.h>
#include <SDL\include\SDL.h>
 
 
const int WIDTH=640;
const int HEIGHT=480;
const float M2P=160.0;
const float P2M=1/M2P;
b2World* world;
 
void init ()
{
    glMatrixMode(GL_PROJECTION);
    glOrtho(0,WIDTH,HEIGHT,0,-1,1);
    glMatrixMode(GL_MODELVIEW);
    glClearColor(0,0,0,1);// проверить
    world=new b2World(b2Vec2(0.00f,9.81f)); //ура мы создали на мир
    addRect(WIDTH/2,HEIGHT-50,WIDTH,30,false);
}
 
b2Body*addRect(int x,int y,int w,int h, bool dyn=true)
{
    b2BodyDef bodydef;
    //указываем позицю, но не забываем что бокс2д измеряет все в метрах а мы в пискселях, поэтому нужно конвертировать
    bodydef.position.Set(x*P2M,y*P2M);
 
    // определяем статика или диниамика, статика недвигается, динамика двигается и влияет на друге объект, есть ещё кинестетика
    if (dyn)
        bodydef.type=b2_dynamicBody;
    b2Body* body=world->CreateBody(&bodydef);
 
    b2PolygonShape shape;
    shape.SetAsBox(P2M*w/2,P2M*h/2);
    b2FixtureDef fixturedef;
    fixturedef.shape=&shape;
    fixturedef.density=1.0; //плотность
    body->CreateFixture(&fixturedef);
 
    return body;
}
выдает вот эту ошибку : alternative.cpp(22): error C3861: addRect: идентификатор не найден

Подскажите, пожалуйста, в чем ошибка.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
20.05.2013, 13:30     Ошибка: идентификатор не найден #2
Нет объявления ф-и. Добавь:

C++
1
2
3
4
b2Body*addRect(int x,int y,int w,int h, bool dyn=true);
void init ()
{
...
TBAPb
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 33
20.05.2013, 13:40  [ТС]     Ошибка: идентификатор не найден #3
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
#include <iostream>
#include <freeglut/freeglut.h>
#include <glui/glui.h>
#include <Box2D\Box2D.h>
#include <SDL\include\SDL.h>
 
 
const int WIDTH=640;
const int HEIGHT=480;
const float M2P=160.0;
const float P2M=1/M2P;
b2World* world;
 
b2Body*addRect(int x,int y,int w,int h, bool dyn=true);
 
void init ()
{
    glMatrixMode(GL_PROJECTION);
    glOrtho(0,WIDTH,HEIGHT,0,-1,1);
    glMatrixMode(GL_MODELVIEW);
    glClearColor(0,0,0,1);// проверить
    world=new b2World(b2Vec2(0.00f,9.81f)); //ура мы создали на мир
    addRect(WIDTH/2,HEIGHT-50,WIDTH,30,false);
}
вот так?

тогда выводит ошибку
alternative.cpp(28): error C2572: addRect: переопределение параметра по умолчанию: параметр 5
alternative.cpp(15): см. объявление "addRect"
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.05.2013, 13:47     Ошибка: идентификатор не найден #4
TBAPb, параметр по умолчанию должен задаваться в одном месте. Либо в прототипе функции, который Вам рекомендовал добавить Ilot, либо в самой функции (в первичном варианте это строка 25).
TBAPb
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 33
20.05.2013, 13:56  [ТС]     Ошибка: идентификатор не найден #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
#include <iostream>
#include <freeglut/freeglut.h>
#include <glui/glui.h>
#include <Box2D\Box2D.h>
#include <SDL\include\SDL.h>
 
 
const int WIDTH=640;
const int HEIGHT=480;
const float M2P=160.0;
const float P2M=1/M2P;
b2World* world;
 
b2Body* addRect(int x,int y,int w,int h, bool dyn);
 
void init ()
{
    glMatrixMode(GL_PROJECTION);
    glOrtho(0,WIDTH,HEIGHT,0,-1,1);
    glMatrixMode(GL_MODELVIEW);
    glClearColor(0,0,0,1);// проверить
    world=new b2World(b2Vec2(0.00f,9.81f)); //ура мы создали на мир
    addRect(WIDTH/2,HEIGHT-50,WIDTH,30,false);
}
 
b2Body*addRect()
{
    b2BodyDef bodydef;
    //указываем позицю, но не забываем что бокс2д измеряет все в метрах а мы в пискселях, поэтому нужно конвертировать
    bodydef.position.Set(x*P2M,y*P2M);
 
    // определяем статика или диниамика, статика недвигается, динамика двигается и влияет на друге объект, есть ещё кинестетика
    if (dyn)
        bodydef.type=b2_dynamicBody;
    b2Body* body=world->CreateBody(&bodydef);
 
    b2PolygonShape shape;
    shape.SetAsBox(P2M*w/2,P2M*h/2);
    b2FixtureDef fixturedef;
    fixturedef.shape=&shape;
    fixturedef.density=1.0; //плотность
    body->CreateFixture(&fixturedef);
 
    return body;
}
Тогда ошибки:

alternative.cpp(31): error C2065: x: необъявленный идентификатор
alternative.cpp(31): error C2065: y: необъявленный идентификатор
alternative.cpp(34): error C2065: dyn: необъявленный идентификатор
alternative.cpp(39): error C2065: w: необъявленный идентификатор
alternative.cpp(39): error C2065: h: необъявленный идентификатор

Я очень извиняюсь, но я только начал изучать с++.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.05.2013, 14:07     Ошибка: идентификатор не найден #6
Цитата Сообщение от TBAPb Посмотреть сообщение
alternative.cpp(31): error C2065: x: необъявленный идентификатор
Приведите код начиная с main().
TBAPb
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 33
20.05.2013, 14:10  [ТС]     Ошибка: идентификатор не найден #7
На всякий случай весь код
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
#include <iostream>
#include <freeglut/freeglut.h>
#include <glui/glui.h>
#include <Box2D\Box2D.h>
#include <SDL\include\SDL.h>
 
 
const int WIDTH=640;
const int HEIGHT=480;
const float M2P=160.0;
const float P2M=1/M2P;
b2World* world;
 
b2Body*addRect(int x,int y,int w,int h, bool dyn=true);
 
void init ()
{
    glMatrixMode(GL_PROJECTION);
    glOrtho(0,WIDTH,HEIGHT,0,-1,1);
    glMatrixMode(GL_MODELVIEW);
    glClearColor(0,0,0,1);// проверить
    world=new b2World(b2Vec2(0.00f,9.81f)); //ура мы создали на мир
    addRect(WIDTH/2,HEIGHT-50,WIDTH,30,false);
}
 
b2Body*addRect()
{
    b2BodyDef bodydef;
    //указываем позицю, но не забываем что бокс2д измеряет все в метрах а мы в пискселях, поэтому нужно конвертировать
    bodydef.position.Set(x*P2M,y*P2M);
 
    // определяем статика или диниамика, статика недвигается, динамика двигается и влияет на друге объект, есть ещё кинестетика
    if (dyn)
        bodydef.type=b2_dynamicBody;
    b2Body* body=world->CreateBody(&bodydef);
 
    b2PolygonShape shape;
    shape.SetAsBox(P2M*w/2,P2M*h/2);
    b2FixtureDef fixturedef;
    fixturedef.shape=&shape;
    fixturedef.density=1.0; //плотность
    body->CreateFixture(&fixturedef);
 
    return body;
}
 
void drawSquare(b2Vec2* points,b2Vec2 center,float angle)
{
    glColor3f(1,1,10);
    glPushMatrix();
     glTranslated(center.x*M2P,center.y*M2P,0);
     glRotatef(angle*180.00f/3.14f,0,0,1);
     glBegin(GL_QUADS);
      for(int i=0;i<4;i++)
          glVertex2f(points[i].x*M2P,points[i].y*M2P);
    glPopMatrix();
}
 
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();
    b2Body* tmp=world->GetBodyList();
    b2Vec2 points[4];
    while (tmp)
    {
        for (int i=0; i<4;i++)
            points[i]=((b2PolygonShape*)tmp->GetFixtureList()->GetShape())->GetVertex(i);
 
        drawSquare(points,tmp->GetWorldCenter(),tmp->GetAngle());
        tmp=tmp->GetNext();
    }
}
 
int main(int argc,char** argv)
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_SetVideoMode(640,480,32,SDL_OPENGL);
    Uint32 start;
    SDL_Event event;
    bool running=true;
    init();
    while (running)
    {
        start=SDL_GetTicks();
        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {
                case SDL_QUIT:
                    running=false;
                    break;
                case SDL_KEYDOWN:
                    switch (event.key.keysym.sym)
                    {
                    case SDLK_ESCAPE:
                        running=false;
                        break;
                    }
                    break;
                case SDL_MOUSEBUTTONDOWN:
                    addRect(event.button.x,event.button.y,20,20,true);
                    break;
            }
        }
        display();
        world->Step(0.016f,5,5);
        SDL_GL_SwapBuffers();
        if (1000.0/30-(SDL_GetTicks()-start))
            SDL_Delay(1000/30-(SDL_GetTicks()-start));
        }
    SDL_Quit();
    return 0;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.05.2013, 14:18     Ошибка: идентификатор не найден #8
TBAPb, 27 строка должна быть такая:
C++
1
b2Body*addRect(int x,int y,int w,int h, bool dyn)
Вообще, самый простой вариант в Вашем случае, это перенести тело функции addRect перед функцией init.
TBAPb
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 33
20.05.2013, 14:26  [ТС]     Ошибка: идентификатор не найден #9
Tulosba, перенес, ошибка ушла. Огромное спасибо.
Но теперь другая ошибка 1> Alternative.cpp
1>LINK : fatal error LNK1561: точка входа должна быть определена
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.05.2013, 14:30     Ошибка: идентификатор не найден #10
Цитата Сообщение от TBAPb Посмотреть сообщение
точка входа должна быть определена
Вы в какой среде проект собираете?
TBAPb
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 33
20.05.2013, 14:31  [ТС]     Ошибка: идентификатор не найден #11
Visual studio c++ express
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.05.2013, 14:39     Ошибка: идентификатор не найден #12
TBAPb, попробуйте сначала пустой проект собрать, т.е. обычное консольное приложение с
C++
1
2
3
4
int main()
{
   return 0;
}
TBAPb
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 33
20.05.2013, 15:35  [ТС]     Ошибка: идентификатор не найден #13
Спасибо, сейчас попробую.

Добавлено через 53 минуты
попробовал. Без вот этого запускается
C++
1
2
3
4
5
#include <iostream>
#include <freeglut/freeglut.h>
#include <glui/glui.h>
#include <Box2D\Box2D.h>
#include <SDL\include\SDL.h>
но как только добавляю этот код сразу выдает ошибку что не может найти точку входа
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 16:04     Ошибка: идентификатор не найден
Еще ссылки по теме:

Возведение в квадрат и ошибка "sqare: идентификатор не найден" C++
Ошибка сортировки "error C3861: merge: идентификатор не найден" C++
C++ Работа с линейными списками. Ошибка "getline: идентификатор не найден"

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.05.2013, 16:04     Ошибка: идентификатор не найден #14
TBAPb, попробуйте по одному добавлять заголовочные файлы, чтобы понять после какого добавления возникает проблема. Однако дальше я Вам вряд ли помогу, с glut не знаком.
Yandex
Объявления
20.05.2013, 16:04     Ошибка: идентификатор не найден
Ответ Создать тему
Опции темы

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