Я попытался исследовать эту ошибку, но это действительно запутывает, как что-то не может быть преобразовано в себя. Хотя у меня есть идея, почему.Ошибка C++ C2664: невозможно преобразовать 'mw :: World' в 'mw :: World'
Ошибка возникает в этой функции:
//GameObject.h
#include "BasicComponents.h"
namespace mw
{
class GameObject
{
public:
void handleEvents(mw::World world, sf::RenderWindow& screen, mw::EventList& events)
{
myInput->handleEvents(*this, screen, events);
//Passing world here causes the error
myPhysics->handleEvents(*this, world, screen, events);
myGraphics->handleEvents(*this, screen, events);
}
};
}//end of namespace
Функция, которая получает ошибку заключается в следующем:
//BasicComponents.h
namespace mw
{
//Needed for parameters
class GameObject;
class World;
///////////////////////
class PhysicsComponent : public mw::Component
{
public:
virtual void handleEvents(GameObject& object, mw::World world, sf::RenderWindow& screen, mw::EventList& events) = 0;
};
}//end of namespace
Я считаю, что проблема заключается в неполном типа, используемого в BasicComponents.h. Тем не менее, это необходимо для того, чтобы я дал функции знать, что класс существует где-то, и мы будем с ним что-то делать, когда узнаем об этом. Если это проблема, как мне ее исправить? В противном случае, почему это происходит?
Edit: конструктор копирования:
//World.h
//Copy Constructor
World(const World& me)
{
myMap = me.myMap;
myObjects = me.myObjects;
}
.
MCVE:
// Class1.h
#pragma once
#include "Class2.h"
namespace test
{
class Class1
{
public:
void function(test::Class3& c3)
{
myC2->function(*this, c3);
}
Class1() {}
~Class1(){}
private:
Class2* myC2;
};
}//end of namespace
// Class2.h
#pragma once
namespace test
{
class Class1;
class Class3;
class Class2
{
public:
virtual void function(Class1 c1, Class3 c3) = 0;
void otherFunction(){}
Class2(){}
~Class2(){}
private:
};
}//end of namespace
Создает ли 'mw :: World' конструктор копирования? Это публично? – Brian
У этого есть конструктор копирования, и да, он является публичным. – Uulamock
@Uulamock Покажите нам экземпляр-конструктор. – 0x499602D2