Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114

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

01.11.2017, 21:59. Показов 6404. Ответов 67

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

Не отрисовываются объекты openGL3.0 в SFML
Почему-то не отрисовываются объекты "нового" опенгл. Старый работает нормально. Перепробовал уже кучу примеров, толку никакого. ...

Из первых четырех строк массива сформировать четыре новых вектора (одномерные массивы). Для каждого вектора найти сумму
Дан двухмерный массив размером M x N. Преобразовать его по правилу – все элементы каждого столбца матрицы умножить на минимальный...

Классы и объекты
Добрый день всем.Хотел узнать кое что,надеюсь вопрос будет соответствовать название темы:) На лабораторной поставили задачу,создать...

67
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 22:05
Ты заголовок подключил?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 22:10  [ТС]
Какой заголовок? Заголовочный файл? Как эти файлы работают я не особо понимаю...
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 22:44
<vector> подключил?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 22:45  [ТС]
да но не работает...
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 22:46
Показывай.
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 22:49  [ТС]
Вот как я создаю вектор
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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 22:49
std::vector сделай. Если не заработает, значит ты не подключил заголовок.
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 22:54  [ТС]
Оп... Точно, чего-то не думал что в этом может быть проблема

Добавлено через 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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 22:56
Текст ошибки где?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 22:59  [ТС]
В главном методе создаю окно
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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 23:04
Тип второго параметра не верный. Может, там другой window?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 23:07  [ТС]
вот часть кода в 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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 23:08
Ну так зачем ты двойной указатель передаёшь? Убери амперсанды.
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 23:11  [ТС]
хорошо но тогда ошибка тоже... сейчас покажу

Добавлено через 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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 23:13
Там же всё написано. Redefenition - ты два раза одну и туже функцию описал, что ли?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 23:21  [ТС]
В смысле?

Добавлено через 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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 23:22
Вот это у тебя правильно сделано?
https://ru.wikipedia.org/wiki/Include_guard
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 23:35  [ТС]
координату курсора мышки относительно окна 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
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 23:40
Если там указатели, просто delete и присваиваешь другой. От массива не отличается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2017, 23:40
Помогаю со студенческими работами здесь

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

Классы, объекты
Привет. Необходимо обратиться к объекту не используя (например, TextBox a = (TextBox)sender) т.к. необходимо использовать ещё и ComboBox с...

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

КЛАССЫ И ОБЪЕКТЫ
Помогите с кодом: Рациональная (несократимая) дробь представляется парой целых чисел (а, b), где а — числитель, b — знаменатель....

Классы и объекты
Здравствуйте объясните пожалуйста следующую задачу Нужно создать класс данных А и класс отображения данных В при этом объекст...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru