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

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

11.04.2019, 22:54. Просмотров 439. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2019, 22:54
Ответы с готовыми решениями:

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

Ошибка "функция-член класса не может быть повторно объявлена"
В заголовочном файле прототипы расписал. При реализации методов класса Rectangle ошибка ...

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

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

1
3440 / 1920 / 804
Регистрация: 07.02.2019
Сообщений: 5,152
11.04.2019, 22:57 2
Цитата Сообщение от WolfyZ Посмотреть сообщение
Vector3::Init
Реализация методов в вашем случае должна быть вне класса
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2019, 22:57

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

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

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

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

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


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

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

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