ошибка перегрузки оператора, даже если он перегружен

#c

#c

Вопрос:

pan.h

 #pragma once
#include "vector.h"

namespace math_ {
    
    void worldToScreen(const Vec2amp; world, Vec2amp; screen, const Vec2amp; offset);
    
}
 

pan.cpp

 #include "pan.h"  
namespace math_{

    void worldToScreen(const Vec2amp; world, Vec2amp; screen, const Vec2amp; offset)
    {
        screen = world   offset;
    }

}
 

vector.h

 #pragma once

namespace math_ {

    struct Vec2
    {
        Vec2(float x_, float y_);
        float x = 0.0f;
        float y = 0.0f;
        Vec2 operator  (const Vec2amp; other);
        Vec2 operator -(const Vec2amp; other);
    };

}
 

vector.cpp

 #include "vector.h"

namespace math_ {

    Vec2::Vec2(float x_, float y_) :
        x(x_), y(y_) {}

    Vec2 Vec2::operator (const Vec2amp; other)
    {
        return Vec2(this->x   other.x, this->y   other.y);
    }
}
 

vector.h включен в pan.h , где я пытаюсь добавить два вектора в функцию worldToScreen , но я получаю сообщение об ошибке no operator matches these operands , хотя оно было перегружено в vector.cpp досье.

Я не думаю, что это проблема с перегрузкой, потому что, когда я пытаюсь сделать то же самое в одном файле, все работает как файл. Проблемы возникают только тогда, когда я пытаюсь разделить вещи на разные файлы. Должно быть что-то, что я делаю неправильно, но я не знаю, что это такое.

Ответ №1:

Ваша перегрузка не отмечена const , но вы вызываете ее из const Vec2amp; :

 struct Vec2
{
    Vec2(float x_, float y_);
    float x = 0.0f;
    float y = 0.0f;
    Vec2 operator  (const Vec2amp; other) const;
    Vec2 operator -(const Vec2amp; other) const;
                                  //   ^^^^^
};

Vec2 Vec2::operator (const Vec2amp; other) const
                                    //  ^^^^^
{
    return Vec2(this->x   other.x, this->y   other.y);
}