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

Ошибка "Функция-член уже определена или объявлена"

11.04.2019, 22:54. Просмотров 200. Ответов 1
Метки нет (Все метки)

Здравствуйте! Делаю класс для работы с векторами (Vector3)
При попытке скомпилировать почти для каждого метода выдает ошибку "Функция-член уже определена или объявлена".

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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#define CHECK_VALID( _v ) 0
#define Assert( _exp ) ((void)0)
 
class Vector3
{
public: 
    float x, y, z;
    Vector3(void);
    Vector3(float X, float Y, float Z) : x(X), y(Y), z(Z) {}
    void Init(float ix = 0.f, float iy = 0.f, float iz = 0.f);
    float operator[](int i) const;
    float& operator[](int i);
    float Length2D(void) const;
 
    Vector3&    operator+(const Vector3& v) const;
    Vector3& operator-(const Vector3& v) const;
    __forceinline Vector3& operator+=(const Vector3& v);
    __forceinline Vector3& operator-=(const Vector3& v);
    __forceinline Vector3& operator/=(float s);
    
    inline void Vector3::Init(float ix, float iy, float iz)
    {
        x = ix; y = iy; z = iz;
        CHECK_VALID(*this);
    }
 
    bool IsZero(float tolerance = 0.01f) const
    {
        return (x > -tolerance && x < tolerance &&
            y > -tolerance && y < tolerance &&
            z > -tolerance && z < tolerance);
    }
 
    inline Vector3::Vector3(void)
    {
    }
 
    inline Vector3::Vector3(float X, float Y, float Z)
    {
        x = X; y = Y; z = Z;
        CHECK_VALID(*this);
    }
 
    inline Vector3::Vector3(const float X, const float Y, const float Z)
    {
        x = X; y = Y; z = Z;
        CHECK_VALID(*this);
    }
    inline Vector3& Vector3::operator+(const Vector3& v) const
    {
        Vector3 res;
        res.x = x + v.x;
        res.y = y + v.y;
        res.z = z + v.z;
        return res;
    }
    inline Vector3& Vector3::operator-(const Vector3& v) const
    {
        Vector3 res;
        res.x = x - v.x;
        res.y = y - v.y;
        res.z = z - v.z;
        return res;
    }
    inline float Vector3::Length2D()const
    {
        CHECK_VALID(*this);
 
        float length = sqrt(x * x + y * y);
 
        return length;
    }
    __forceinline  Vector3& Vector3::operator+=(const Vector3& v)
    {
        CHECK_VALID(*this);
        CHECK_VALID(v);
        x += v.x; y += v.y; z += v.z;
        return *this;
    }
    __forceinline  Vector3& Vector3::operator-=(const Vector3& v)
    {
        CHECK_VALID(*this);
        CHECK_VALID(v);
        x -= v.x; y -= v.y; z -= v.z;
        return *this;
    }
    __forceinline  Vector3& Vector3::operator/=(float fl)
    {
        Assert(fl != 0.f);
        float oofl = 1.0f / fl;
        x *= oofl;
        y *= oofl;
        z *= oofl;
        CHECK_VALID(*this);
        return *this;
    }
 
    Vector3& Vector3::to_angle() const
    {
        Vector3 angles;
 
        if (y == 0.0f && x == 0.0f)
        {
            angles.x = (z > 0.0f) ? 270.0f : 90.0f;
            angles.y = 0.0f;
        }
        else
        {
            angles.x = std::atan2(-z, Length2D()) * -180 / M_PI;
            angles.y = std::atan2(y, x) * 180 / M_PI;
 
            if (angles.y > 90)
                angles.y -= 180;
            else if (angles.y < 90)
                angles.y += 180;
            else if (angles.y == 90)
                angles.y = 0;
        }
 
        angles.z = 0.0f;
 
        return angles;
    }
 
    Vector3& Vector3::Clamp()
    {
        if (x > 180)
            x -= 360;
        else if (x < -180)
            x += 360;
 
        if (y > 180)
            y -= 360;
        else if (y < -180)
            y += 360;
 
        if (x < -89)
            x = -89;
 
        if (x > 89)
            x = 89;
 
        while (y < -180.0f)
            y += 360.0f;
 
        while (y > 180.0f)
            y -= 360.0f;
 
        z = 0;
 
        return *this;
    }
};
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2019, 22:54
Ответы с готовыми решениями:

Сообщение об ошибке "функция-член уже определена"
Вот код #include &lt;iostream&gt; using namespace std; class Matrix { private: int **Array;...

Ошибка - "Функция _main уже определена"
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; void check_weekday(string day) { if...

Ошибка: error C2129: статическая функция объявлена, но не определена
В помощь начинающим изучать C++ хочу подсказать реальную причину этой ошибки. Так как реально в...

Ошибка "Перегруженная функция-член не найдена"
заголовочный файл clas_s.h #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using...

Ошибка работы с классом ("функция.уже имеется текст реализации")
Здравствуйте. Я новичок в C++, и в программировании в целом. Помогите пожалуйста. Хочу применить в...

1
zayats80888
1752 / 979 / 419
Регистрация: 07.02.2019
Сообщений: 2,654
11.04.2019, 22:57 2
Цитата Сообщение от WolfyZ Посмотреть сообщение
Vector3::Init
Реализация методов в вашем случае должна быть вне класса
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2019, 22:57

Ошибка "Переменная не объявлена"
Добрый дамы и господа эксперты. Сегодня наконец слегка продвинулся в изучении языка. Нашёл...

Однотипная ошибка:"Точка входа должна быть определена"
Доброго времени суток. В общем всё перепробовал разобраться сам но не выходит и чего-то я взять в...

Ошибка "Точка входа должна быть определена"
Задание Для динамической структуры данных разработать класс, предусмотрев в нем конструкторы...


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

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

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