在一年多没有使用 C++ 之后,我才刚刚开始重新接触 C++,所以请耐心等待。
我有一个带有一个方法的类,该方法将对不同类的对象的引用作为参数。代码看起来像这样:(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& 类型的变量并将其传递给方法)但没有任何效果,所以我想我会在这里问.