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

Error: no match for 'operator-' (operand types are 'Space' and 'int')

08.01.2020, 18:42. Показов 4080. Ответов 5

Author24 — интернет-сервис помощи студентам
Не знаю с чем связано, но не с SFML, решил попробовать создать симуляцию космоса и так-как если космических объектов будет много то и связей между ними и для удобной работы с ними создал класс Space. Еще не дописал код, но хотел проверить хоть скопилится или нет. Вот код:
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
#include <iostream>
#include <SFML/Graphics.hpp>
#include <cmath>
 
using namespace sf;
 
class Object{
private:
    float pX, pY, sX, sY, m;
 
public:
    Object(){
 
    };
    Object(float px, float py, float sx, float sy, float M) : pX{px}, pY{py}, sX{sx}, sY{sy}, m{M} {
 
    };
    void interaction(Object object, double time){
        sX += time * object.m / pow(abs(pX - object.pX), 2);
        sY += time * object.m / pow(abs(pY - object.pY), 2);
    }
    void update(double time){
        pX += time * sX;
        pY += time * sY;
    }
    void set(float px, float py, float sx, float sy, float M){
        pX = px; pY = py; sX = sx; sY = sy; m = M;
    }
 
};
 
class Space{
private:
    Object *objects; Object *buf; int countObject, bufCount = 0;
 
public:
    Space(){
 
    };
    Space(int argCount){
        if(countObject > 0){
            buf = new Object[bufCount];
            for(int i = 0; i < bufCount; i++)
                buf[i] = objects[i];
            delete[] objects;
        }
        objects = new Object[countObject];
        for(int i = 0; i < bufCount; i++)
            objects[i] = buf[i];
        delete[] buf;
 
    };
    void addObject(float px, float py, float sx, float sy, float M){
        bufCount = countObject;
        countObject++;
        Space(countObject);
        objects[countObject-1].set(px, py, sx, sy, M);
    }
 
};
 
 
int main()
{
    RenderWindow window(VideoMode(800, 600), "Simulation");
 
    while(window.isOpen()){
        Event event;
        while(window.pollEvent(event)) if(event.type == Event::Closed) window.close();
 
 
 
 
 
    }
    return 0;
}
Ошибка строка 57
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2020, 18:42
Ответы с готовыми решениями:

Ошибка в коде "no match for 'operator[]' (operand types are 'Student' and 'int')"
Помогите пожалуйста разобраться, в чём проблема? Весь код: #include &quot;windows.h&quot; #include...

No match for 'operator'(operand types are rapidjson:: )
эта ошибка возникает в цикле for. указывает на итератор iter=document.Begin(). Суть такая : мне...

Ambiguous overload for 'operator+' (operand types are 'int' and 'Rational')
Решал задачку, все делал по презентации. Создал класс рациональных чисел. Нужно перегрузить...

No match for 'operator<' (operand types are 'std::__cxx11::string {aka std::__c
Имеем следующий код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include...

5
Вездепух
Эксперт CЭксперт С++
11694 / 6373 / 1723
Регистрация: 18.10.2014
Сообщений: 16,058
08.01.2020, 18:47 2
Цитата Сообщение от Bauka555 Посмотреть сообщение
C++
1
Space(countObject);
Так а что это такое, по-вашему? Что вы хотели этим сказать? Что должна делать эта строчка?
0
-12 / 0 / 0
Регистрация: 25.07.2019
Сообщений: 43
08.01.2020, 19:00  [ТС] 3
конструктор

Добавлено через 1 минуту
вызывать конструктор нельзя? тогда можно разбить его на конструктор и метод

Добавлено через 1 минуту
но ошибка разве в этом?

Добавлено через 2 минуты
можно еще вопрос? я случайно заметил что в 19 и 20 строке я использовал приватные переменные объекта аргумента, но компилятор не выдал ошибку, странно

Добавлено через 4 минуты
57|note: 'Space' is not derived from 'const sf::Vector2<T>'| и еще такой note про эту строку
0
Вездепух
Эксперт CЭксперт С++
11694 / 6373 / 1723
Регистрация: 18.10.2014
Сообщений: 16,058
08.01.2020, 19:00 4
Цитата Сообщение от Bauka555 Посмотреть сообщение
ызывать конструктор нельзя? тогда можно разбить его на конструктор и метод
Вызвать конструктор для какого объекта? Что вы именно пытаетесь сделать?

Цитата Сообщение от Bauka555 Посмотреть сообщение
но ошибка разве в этом?
Именно в этом. Ошибка в строке 57 - это уже не более чем следствие бессмыслицы в строке 56.

Цитата Сообщение от Bauka555 Посмотреть сообщение
в 19 и 20 строке я использовал приватные переменные объекта аргумента, но компилятор не выдал ошибку
Вы осуществляете доступ к приватным полям класса Object из метода класса Object. Здесь нет ошибки.
0
-12 / 0 / 0
Регистрация: 25.07.2019
Сообщений: 43
08.01.2020, 19:05  [ТС] 5
Конструктор значит только 1 раз можно вызывать для объекта? Я хотел типа в конструкторе записать чтобы удалять выделенную память и создавать новый динамический массив, и каждый раз вызывать конструктор с аргументом длины массива когда добавляю новый объект

Добавлено через 2 минуты
как это можно решить?
0
6105 / 3460 / 1405
Регистрация: 07.02.2019
Сообщений: 8,790
08.01.2020, 20:10 6
Цитата Сообщение от Bauka555 Посмотреть сообщение
как это можно решить?
C++
1
2
3
4
5
6
7
8
9
10
11
class Space
{
    std::vector<Object> container;
public:
    Space() {}
    Space(int argCount) :container(argCount) {}
    void addObject(float px, float py, float sx, float sy, float M)
    {
        container.emplace_back(px, py, sx, sy, M);
    }
};
1
08.01.2020, 20:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2020, 20:10
Помогаю со студенческими работами здесь

Ошибка на "cout <<" no match for operator operand types are std::basic_ostream char
Немного слов про код.Данный код создан для выдачи номера машины,цвета,марки при предоставлении...

Error: ambiguous overload for 'operator<<' (operand types are 'std::ofstream {aka std::basic_ofstream<char>}'
на #define LOG(Variable) Log&lt;&lt;&quot;&lt;&quot;;...

Error: invalid operands of types 'float' and 'int' to binary 'operator%'
float n,m,k; cout &lt;&lt; &quot;Kiek vairotojas is sandelio turi parvezti deziu i parduotuve?: &quot;; ...

error: invalid operands of types 'const int*' and 'const int*' to binary 'operator+'
Что означает ошибка в 8 строчке error: invalid operands of types 'const int*' and 'const int*' to...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru