Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
SkeiTax
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 93
1

SFML. Вектора, массивы, классы, объекты

01.11.2017, 21:59. Просмотров 1017. Ответов 67

Доброго времени суток форумчане!
Возникла проблема с векторами. но понимаю как работают эти самые векторы.
Задача такова, есть абстрактный класс Object с какими-то функциями(это не столь важно). Так же есть дочерние классы такие как Circle и Circle2. В главной функции создаются новые объекты дочерних классов и заносятся в массив.
НО когда хочу сделать через вектор то выдаёт ошибку: "error: 'vector' does not name a type".
так же по мере решения это проблемы будет ещё несколько вопросов таких как: "Как реализовать уничтожение объектов Массива/Вектора", "Как сделать универсальную функцию определения координат курсора в окне"
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2017, 21:59
Ответы с готовыми решениями:

классы и объекты в с++
очень прошу помочь написать программу. т.к. в программировании я 0 :( Написать...

классы и объекты
Здравствуйте. Помогите с задачей. Нужно написать программу на классы и объекты....

Классы и объекты на С++
Задание: Класс Triangle (треугольник). Класс хранит Декартовы координаты трех...

Классы и объекты
В чем ошибка помогите пожалуйста #include <iostream> #include <windows.h>...

Классы и объекты в С++
Определить класс Квадрат (Square) со сторонами, параллельными осям координат....

67
nmcf
6498 / 5734 / 2610
Регистрация: 14.04.2014
Сообщений: 24,454
01.11.2017, 22:05 2
Ты заголовок подключил?
0
SkeiTax
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 93
01.11.2017, 22:10  [ТС] 3
Какой заголовок? Заголовочный файл? Как эти файлы работают я не особо понимаю...
0
nmcf
6498 / 5734 / 2610
Регистрация: 14.04.2014
Сообщений: 24,454
01.11.2017, 22:44 4
<vector> подключил?
0
SkeiTax
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 93
01.11.2017, 22:45  [ТС] 5
да но не работает...
0
nmcf
6498 / 5734 / 2610
Регистрация: 14.04.2014
Сообщений: 24,454
01.11.2017, 22:46 6
Показывай.
0
SkeiTax
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 93
01.11.2017, 22:49  [ТС] 7
Вот как я создаю вектор
C++
1
vector<int> k(1);
вот что выводит компилятор "...|error: 'vector' does not name a type|"

Добавлено через 1 минуту
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
|8|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11|
|8|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11|
|13|error: 'vector' does not name a type|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|

Это всё сообщение после сборки...
0
nmcf
6498 / 5734 / 2610
Регистрация: 14.04.2014
Сообщений: 24,454
01.11.2017, 22:49 8
std::vector сделай. Если не заработает, значит ты не подключил заголовок.
0
SkeiTax
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 93
01.11.2017, 22:54  [ТС] 9
Оп... Точно, чего-то не думал что в этом может быть проблема

Добавлено через 55 секунд
тогда следующий вопрос

Добавлено через 1 минуту
Вот часть кода в отдельном файле
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Function.cpp
using namespace sf;
 
int mouse_xy(bool i, RenderWindow *win){
    int xy[2];
    Vector2i mouse_v;
 
    mouse_v = Mouse::getPosition(*win);
 
    xy[0] = mouse_v.x;
    xy[1] = mouse_v.y;
 
    return xy[i];
}
 
float distance_to_point(float x1, float y1, float x2, float y2){
    float x, y;
    x=pow(pow(x1-x2,2),0.5);
    y=pow(pow(y1-y2,2),0.5);
    return pow(x*x+y*y,0.5);
}
Когда пытаюсь обратиться из объекта класса Circle к этой функции выдаёт ошибку
0
nmcf
6498 / 5734 / 2610
Регистрация: 14.04.2014
Сообщений: 24,454
01.11.2017, 22:56 10
Текст ошибки где?
0
SkeiTax
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 93
01.11.2017, 22:59  [ТС] 11
В главном методе создаю окно
C++
1
RenderWindow window(VideoMode(600, 500), "WinGraph");
Потом создаю объект одного из класса Circle/Circle2
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
if (!preSpase)
        if (Keyboard::isKeyPressed(Keyboard::Space)){
            Circle *cir = new Circle();
            cir->XX = mouse_xy(0, &window);
            cir->YY = mouse_xy(1, &window);
            cir->window = &window;
            cir->ID=id;
            cir->Create();
            obj[id] = cir;
            id++;
            upd=true;
        }
        if (!preControl)
        if (Keyboard::isKeyPressed(Keyboard::LControl)){
            Circle2 *cir = new Circle2();
            cir->XX = mouse_xy(0, &window);
            cir->YY = mouse_xy(1, &window);
            cir->window = &window;
            cir->ID=id;
            cir->Create();
            obj[id] = cir;
            id++;
            upd=true;
        }
В классе Circle я в методе Step() есть такое условие
C++
1
if (distance_to_point(x, y, mouse_xy(0,&window), mouse_xy(1,&window))<R);
и в итоге выдаёт ошибку: "...|error: cannot convert 'sf::RenderWindow**' to 'sf::RenderWindow*' for argument '2' to 'int mouse_xy(bool, sf::RenderWindow*)'|"
0
nmcf
6498 / 5734 / 2610
Регистрация: 14.04.2014
Сообщений: 24,454
01.11.2017, 23:04 12
Тип второго параметра не верный. Может, там другой window?
0
SkeiTax
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 93
01.11.2017, 23:07  [ТС] 13
вот часть кода в Circle2
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
class Circle2 : public Object{
public:
    float x, XX, y, YY, speed, R=25;
    int dir, ID;
 
    RenderWindow *window;
    CircleShape shape;
 
    void Create(){
        x=XX;
        y=YY;
        dir=0;
        speed=0;
 
        shape.setRadius(R);
        shape.setOrigin(R,R);
        shape.setFillColor(Color(100,175,200));
    }
...
 
        if (speed<0) speed=0;
        if (Keyboard::isKeyPressed(Keyboard::A)) dir=180;
        if (Keyboard::isKeyPressed(Keyboard::D)) dir=0;
        if (Keyboard::isKeyPressed(Keyboard::W)) dir=90;
        if (Keyboard::isKeyPressed(Keyboard::S)) dir=270;
        y-=sin(dir*M_PI/180)*speed;
        x+=cos(dir*M_PI/180)*speed;
 
        if (distance_to_point(x, y, mouse_xy(0,&window), mouse_xy(1,&window))<R);
    }
 
    void Draw(){
        shape.setPosition(x, y);
        window->draw(shape);
    }
0
nmcf
6498 / 5734 / 2610
Регистрация: 14.04.2014
Сообщений: 24,454
01.11.2017, 23:08 14
Ну так зачем ты двойной указатель передаёшь? Убери амперсанды.
0
SkeiTax
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 93
01.11.2017, 23:11  [ТС] 15
хорошо но тогда ошибка тоже... сейчас покажу

Добавлено через 1 минуту
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
|8|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11|
|8|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11|
||In function 'int mouse_xy(bool, sf::RenderWindow*)':|
->|5|error: redefinition of 'int mouse_xy(bool, sf::RenderWindow*)'|
|5|note: 'int mouse_xy(bool, sf::RenderWindow*)' previously defined here|
||In function 'float distance_to_point(float, float, float, float)':|
|17|error: redefinition of 'float distance_to_point(float, float, float, float)'|
|17|note: 'float distance_to_point(float, float, float, float)' previously defined here|
||=== Build failed: 2 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|

Добавлено через 1 минуту
в условии теперь без амперсантов
C++
1
if (distance_to_point(x, y, mouse_xy(0, window), mouse_xy(1, window))<R);
0
nmcf
6498 / 5734 / 2610
Регистрация: 14.04.2014
Сообщений: 24,454
01.11.2017, 23:13 16
Там же всё написано. Redefenition - ты два раза одну и туже функцию описал, что ли?
0
SkeiTax
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 93
01.11.2017, 23:21  [ТС] 17
В смысле?

Добавлено через 1 минуту
вот
C++
1
if (distance_to_point(x, y, mouse_xy(0, window), mouse_xy(1, window))<R);
Добавлено через 3 минуты
функция возвращающая расстояние между точками - distance_to_point(x1, y1, x2, y2)
Возвращает координату по x и y если первый аргумент равен 0 или 1 соответственно - mouse_xy(0, window)
0
nmcf
6498 / 5734 / 2610
Регистрация: 14.04.2014
Сообщений: 24,454
01.11.2017, 23:22 18
Вот это у тебя правильно сделано?
https://ru.wikipedia.org/wiki/Include_guard
0
SkeiTax
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 93
01.11.2017, 23:35  [ТС] 19
координату курсора мышки относительно окна window *

Добавлено через 2 минуты
В файле Cickle2.cpp подключается <Function.cpp> и в Main.cpp

Добавлено через 1 минуту
Все подключения в Main.cpp
C++
1
2
3
4
5
6
#include "Include.h"
#include "Object.cpp"
#include "Circle1.cpp"
#include "Circle2.cpp"
#include "Function.cpp"
#include <vector>
Все подключения в Circle2.cpp
C++
1
2
#include "Include.h"
#include "Function.cpp"
И Include.h
C++
1
2
3
4
5
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/System/Vector2.hpp>
#include <math.h>
Добавлено через 3 минуты
Благодарю за помощь я понял в чём была беда)

Добавлено через 41 секунду
Теперь меня интересует ещё кое что

Добавлено через 3 минуты
Вот у меня есть объект Circle & Circle2. В данный момент они сохраняются в массив Object *obj[1];
я хочу передать под вектор всё это дело и как я понимаю это выглядит так: vector<Object*> obj;
И вот как например удалять созданные объекты которые "сохраняются" в этот вектор и как и него добавлять новые объекты Circle и Circle2?
0
nmcf
6498 / 5734 / 2610
Регистрация: 14.04.2014
Сообщений: 24,454
01.11.2017, 23:40 20
Если там указатели, просто delete и присваиваешь другой. От массива не отличается.
0
01.11.2017, 23:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2017, 23:40

Объекты и классы в С + +
Нужно что бы все переменные были в private...но не работает((...Помогите плиз...

Классы и объекты
Создать объявление класса и разработать программу-драйвер, который...

Классы и объекты
Задания: 1.В соответствии с вариантом заданий 1 создать класс, в котором...


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

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

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