c++ - 问题/链接静态函数c++

标签 c++ function static g++ linker

我正在尝试构建一个小程序,并且我有自己的库 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/

相关文章:

c++ - 具有常量参数的递归函数

c++ - 正如 Clang 似乎表明的那样,这段代码真的是未定义的吗?

c++ - QColor hsl 色调精度

javascript - 在 JavaScript 中使用原型(prototype)在现实世界中有什么优势吗?

javascript - 显示与类同名的 id 元素

c++ - 在方法中返回静态变量是个坏主意吗?

c++ - 获取可用的最大类型

函数声明后的 C++ throw() (_NOEXCEPT)

Java-双菜单栏-设置 'static'和 'void'参数

oop - Matlab相当于调用内部静态类