Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Перегрузка оператора += - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ условие http://www.cyberforum.ru/cpp-beginners/thread357010.html
Ответ скорее всего прост,но не могу придумать никак #include <stdio.h> #include <conio.h> #include <locale.h> int fact(int n)//в цикле со счётчиком умножают переменную на счетчик, который...
C++ Расчитать значение функии f(x) по соответсвующей формуле. Добрый день, вот моё задание: Составьте алгоритм программы, которая принимает от пользователя значение x и в зависимости от его значения, расчитывет значение функии f(x) по соответсвующей формуле.... http://www.cyberforum.ru/cpp-beginners/thread357006.html
Создание динамического массива C++
const int Num=5; const int SIZE=4096 * Num; SHORT Buf; как такое заменить, если Num- инициализируется при загрузке программы, читается из файла. int Num; int SIZE=4096 * Num; SHORT* Buf...
C++ Компиляторы
Скажите пожалуйста какие сейчас есть компиляторы для С++ и какой из них на сегодняшний день самый распространённый и широкоиспользуемый?
C++ сумма соседних членов последовательности http://www.cyberforum.ru/cpp-beginners/thread356953.html
Даны числа а1, а2, a(n) Известно, что а1>0 и что среди а2, а3, a(n) есть хотя бы одно отрицательное число. Пусть а1, a2, an - члены данной последовательности, предшествующие первому отрицательному...
C++ Вычитаем процент от числа. Вот фрагмент программки... weight = growth - 110; ideal_weight = weight - (weight * (10/100)); cout << Rus("Ваш идеальный вес ") << ideal_weight; cout << Rus(" кг.") << endl; ... подробнее

Показать сообщение отдельно
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
27.09.2011, 21:10  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Приведи полностью не рабочий код. Тот что в архиве без притензий скомпилировался.
Хм, это интересно,хотя может Ваш компилятор просто не проверял Mat4 так как таких обьектов в main нету. Не рабочий код:
C++
1
2
3
4
5
6
7
int main()
{
    Mat4 a;
    Mat4 b;
    a+=b;
 
}
Хотя ошибка компиляции у меня ещё до main: компилятор сразу ругается на
C++
1
2
3
4
5
6
7
    Mat4 &operator+=(const Mat4 &rig) const
    {
        for (size_t i=0;i<elem.size();i++)
         elem[i]+=rig[i]; // ЭТО в Mat4.h
 
        return *this;
    }
Опять же таки прикрепляю все 3 файла, я их немного упростил - отправил в комментарии не нужные перегрузки на данный момент, чтобы легче было читать, хотя то что Вы пишите мол всё это скомпилировалось настораживает...

Ну а для тех кому не хочется качать вот код:
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <vector>
#include "Mat4.h"
#include "Vec4.h"
using namespace std;
 
int main()
{
    Mat4 a;
    Mat4 b;
    a+=b;
 
}
Vec4.h
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
#ifndef VEC4_H
#define VEC4_H
 
#include <vector>
#include <iostream>
using namespace std;
 
class Vec4
{
    vector<float> elem;
 
    public:
//    class Out_of_bounds{};
    Vec4(float a,float b,float c, float d)
    {
        elem.resize(4);
        elem[0]=a;elem[1]=b;elem[2]=c;elem[3]=d;
    }
 
    Vec4()
    {
        elem.resize(4);
        elem[0]=elem[1]=elem[2]=elem[3]=1;
    }
 
    Vec4(const Vec4& right)
    {
        elem.resize(4);
        for (size_t i=0;i<elem.size();i++)
         elem[i]=right[i];
    }
 
 
    Vec4 &operator+=(const Vec4 &right)
    {
        for (size_t i=0;i<elem.size();i++)
        {
            elem[i]+=right[i];
        }
        return *this;
    }
 
    Vec4 operator+(Vec4 &right) const
    {
        Vec4 temp(*this);
        for (size_t i=0;i<elem.size();i++)
        {
            temp+=right;
        }
        return temp;
    }
 
    Vec4 &operator=(Vec4 &right)
    {
        for(size_t i=0;i<elem.size();i++)
         elem[i]=right[i];
        return *this;
    }
 
    Vec4 &operator=(const Vec4 &right)
    {
        for(size_t i=0;i<elem.size();i++)
         elem[i]=right[i];
        return *this;
    }
 
    float operator[](int i) const
    {
        return ((i>=0) && (i<4) ? elem[i] : -1);
    }
};
 
#endif
Mat4.h
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
#include "Vec4.h"
 
class Mat4
{
    vector<Vec4> elem;
 
public:
    explicit Mat4(const Vec4 &x)
    {
        elem.resize(4);
        for (size_t i=0;i<elem.size();i++)
        elem[i]=x;
    }
 
    Mat4()
    {
        elem.resize(4);
        Vec4 temp;
        for (size_t i=0;i<elem.size();i++)
         elem[i]=temp;
    }
 
    Vec4 fun()
    {
        Vec4 a;
        Vec4 b;
        a+=b;
        return a;
    }
 
    Vec4 operator[](int i)
    {
        return ((i>=0) && (i<=3) ? elem[i] : elem[0]);
    }
 
    Vec4 operator[](int i) const
    {
        return ((i>=0) && (i<=3) ? elem[i] : elem[0]);
    }
 
    Mat4 &operator=(Mat4 &right)
    {
        for (size_t i=0;i<elem.size();i++)
         elem[i]=right[i];
 
        return *this;
    }
 
    Mat4 &operator+=(const Mat4 &rig) const
    {
        for (size_t i=0;i<elem.size();i++)
         elem[i]+=rig[i]; // Ошибка
 
        return *this;
    }
};
Ошибка:
Код
C:\c++\Projects\Temp\Mat4.h||In member function 'Mat4& Mat4::operator+=(const Mat4&) const':|
C:\c++\Projects\Temp\Mat4.h|52|error: passing 'const Vec4' as 'this' argument of 'Vec4& Vec4::operator+=(const Vec4&)' discards qualifiers|
C:\c++\Projects\Temp\Mat4.h|54|error: invalid initialization of reference of type 'Mat4&' from expression of type 'const Mat4'|
||=== Build finished: 2 errors, 0 warnings ===|
0
Вложения
Тип файла: zip operator+=.zip (1.3 Кб, 5 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru