我正在尝试构建一个小程序,并且我有自己的库 libfoo。我有一个从我的 Vector3 类(即 crossProduct)调用静态函数的相机类。我的相机类和 Vector3 类编译正常并内置到 libfoo 中。但是,当我这样链接时:
g++ -g -O2 -o test1 main.o -lfoo
我明白了:
libfoo.so: undefined reference to
foo::Vector3::dotProduct(foo::Vector3 const&, foo::Vector3 const&)
现在Vector3.h中的函数是:
static Vector3 crossProduct(const Vector3 &v1, const Vector3 &v2);
并且在
类定义...它在 Vector3.cpp 中定义。
程序运行良好,直到我在 Camera.cpp 中调用了这个静态函数。为了解决这个问题,我必须将 Vector3.cpp 中的代码从头文件中的代码更改为:
Vector3 Vector3::crossProduct(const Vector3 &v1, const Vector3 &v2)
编译、链接和运行正常。
Vector3 类是其他人为 Windows 编译器编写的,但我已将其移至 Linux。这是 g++ 的东西吗?还是错误的代码?
TIA。
最佳答案
听起来您的 vector3.cpp 文件最初具有以下内容:
Vector3 crossProduct(const Vector3 &v1, const Vector3 &v2)
{
...
}
您必须更改为:
Vector3 Vector3::crossProduct(const Vector3 &v1, const Vector3 &v2)
{
...
}
前者只是定义了一个名为 crossProduct 的独立函数,而后者定义了一个名为 crossProduct 的 Vector3 成员函数。后者是正确的,我猜测原始代码是错误的。
关于c++ - 问题/链接静态函数c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1732795/