Я только начинаю снова посещать C++ после того, как не использовал этот язык более года, поэтому, пожалуйста, будьте терпеливы.Передача объектов класса по ссылке
У меня есть класс с методом, который ссылается на объект другого класса в качестве аргумента. Код довольно много выглядит следующим образом: (full code on pastebin)
//Entity.h
namespace xe {
class Entity {...}
}
//Component.h
#include "entity.h"
class Entity;
namespace xe{
class Component
{
public :
void set_parent(Entity&);
private :
Entity* m_parent;
}
}
//Component.cpp
#include "component.h"
xe::Component::set_parent(Entity& entity) { m_parent = &entity;}
//Main.cpp
#include "Entity.h"
#include "Component.h"
int main()
{
Entity entity(1 /*id*/);
Component comp;
comp.set_parent(entity);
}
}
Этот код вызывает следующую Ошибка компиляции (Visual Studio)
error c2664:xe::Component::set_parent(Entity&) : cannot convert parameter 1 from xe::Entity to Entity&
Между тем следующие пробеги кода и компилирует прекрасно
void square(int& i)
{
i *= i;
}
int main()
{
int number = 2;
square(number);
std::cout<<number;
}
Теперь, как я уже сказал, я не эксперт на C++, но для меня единственная разница между этими двумя функциями заключается в том, что square() принимает ссылку на примитивный тип данных (int), а do _something() принимает ссылку на экземпляр класса. Я не мог найти ничего о передаче объектов класса по ссылке, и я уже пробовал несколько альтернатив (делая ссылку const, явно создавая переменную типа Bar & и передавая ее методу), но ничего не работало, поэтому я думал, что буду спросите здесь.
Ваш код должен быть другим. Это компилируется, как только вы исправляете очевидные проблемы. – chris
[Как @chris написал] (http://coliru.stacked-crooked.com/view?id=cd9dbcfab91d7ffce4405c9247ecb6cf-9a9914b3e2b7ed07c206d6accecccdb6) –
[Как @AndyProwl написал, с другой IDE] (http://ideone.com/uLUi8k) –