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

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток форумчане!
Возникла проблема с векторами. но понимаю как работают эти самые векторы.
Задача такова, есть абстрактный класс 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
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 22:05 2
Ты заголовок подключил?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 22:10  [ТС] 3
Какой заголовок? Заголовочный файл? Как эти файлы работают я не особо понимаю...
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 22:44 4
<vector> подключил?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
01.11.2017, 22:45  [ТС] 5
да но не работает...
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 22:46 6
Показывай.
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
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
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 22:49 8
std::vector сделай. Если не заработает, значит ты не подключил заголовок.
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
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
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 22:56 10
Текст ошибки где?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
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
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 23:04 12
Тип второго параметра не верный. Может, там другой window?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
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
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 23:08 14
Ну так зачем ты двойной указатель передаёшь? Убери амперсанды.
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
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
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 23:13 16
Там же всё написано. Redefenition - ты два раза одну и туже функцию описал, что ли?
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
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
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 23:22 18
Вот это у тебя правильно сделано?
https://ru.wikipedia.org/wiki/Include_guard
0
0 / 0 / 0
Регистрация: 06.09.2017
Сообщений: 114
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
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.11.2017, 23:40 20
Если там указатели, просто delete и присваиваешь другой. От массива не отличается.
0
01.11.2017, 23:40
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2017, 23:40
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как создавать приложения для iOS/iPhone
InfoMaster 12.01.2025
Введение в разработку iOS-приложений Разработка приложений для iOS открывает огромные возможности в мире мобильных технологий. С каждым годом количество пользователей iPhone и iPad растет,. . .
Как использовать Kotlin в Android разработке
InfoMaster 12.01.2025
Язык программирования Kotlin, разработанный компанией JetBrains, стал неотъемлемой частью современного мира Android-разработки. Первоначально представленный в 2011 году, Kotlin был официально. . .
Использование Go (Golang) в backend разработке
InfoMaster 12.01.2025
Язык программирования Go (Golang), разработанный компанией Google, стал важным инструментом для разработчиков программного обеспечения, особенно в области бэкенд-разработки. С момента своего. . .
Как работать с Laravel в PHP
InfoMaster 12.01.2025
Введение в Laravel Laravel представляет собой современный PHP-фреймворк с открытым исходным кодом, который значительно упрощает и ускоряет процесс разработки веб-приложений. Этот фреймворк был. . .
Как программировать под HCL Notes и создавать свои продукты на ее основе
InfoMaster 11.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой мощную платформу для разработки корпоративных приложений, которая сочетает в себе функции электронной почты, календаря,. . .
Как работать с SVN (Subversion)
InfoMaster 11.01.2025
Введение Система контроля версий является неотъемлемой частью современного процесса разработки программного обеспечения. Она обеспечивает управление изменениями в коде, позволяет отслеживать. . .
Использование GraphQL в JavaScript
InfoMaster 11.01.2025
Введение в GraphQL и его преимущества В современной разработке веб-приложений эффективный обмен данными между клиентом и сервером играет ключевую роль. GraphQL представляет собой язык запросов и. . .
Администрирован­­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru