【发布时间】:2015-02-05 16:18:40
【问题描述】:
我想为我创建的类定义运算符,我希望运算符是内联的/p>
Vector3D.h
class Vector3D
{
...
};
inline Vector3D operator+(Vector3D lv, const Vector3D& rv);
inline Vector3D operator-(Vector3D lv, const Vector3D& rv);
Vector3D.cpp
...
inline Vector3D operator+(Vector3D lv, const Vector3D& rv)
{
lv += rv;
return lv;
}
inline Vector3D operator-(Vector3D lv, const Vector3D& rv)
{
lv -= rv;
return lv;
}
在_tmain 函数中调用函数:
std::cout << v1 << "+" << v2 << "=" << v1+v2 << std::endl;
std::cout << v1 << "-" << v2 << "=" << v1-v2 << std::endl;
我得到错误:
1>RotateShapes.obj : error LNK2019: unresolved external symbol "class Vector3D __cdecl operator+(class Vector3D,class Vector3D const &)" (??H@YA?AVVector3D@@V0@ABV0@@Z) referenced in function _wmain
1>RotateShapes.obj : error LNK2019: unresolved external symbol "class Vector3D __cdecl operator-(class Vector3D,class Vector3D const &)" (??G@YA?AVVector3D@@V0@ABV0@@Z) referenced in function _wmain
如果我删除inline,那么一切正常。如果我不调用函数,则编译成功。有没有办法在声明它的不同位置定义 inline 函数?
【问题讨论】:
-
如果你
Vector3D是一个类,那么在.cpp文件中你需要将方法体声明为Vector3D::operator+。我认为你还需要一个返回类型 -
@Vinzenz 你也可以使用非会员表格。
-
@Vinzenz,
Vector3D是一个类,但这些运算符不是该类的成员。 -
内联函数需要放在头文件中,以便在其他源文件中使用。
-
@IlyaMelamed 你真的需要将它们放在 cpp 文件中吗?常见的模式是在头文件末尾包含一个“.inl”文件。
标签: c++ operator-keyword inline-functions