#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);
}