在 Code::Blocks 中链接 .cpp 文件时出现问题

发布于 2024-12-12 01:52:40 字数 1321 浏览 0 评论 0原文

我有一个名为 cnVector.h 的头文件,其实现是在 cnVector.cpp 中编写的。 这两个文件位于同一目录中。

cNormalCBP/
   + src/
       + cNormal/
           + cnUtils/
               - cnVector.h
               - cnVector.cpp
       - main.cpp

标头包含一个简单的类定义。

class cnVector {
    public:
        cnVector(double, double, double);

        inline cnVector cross(const cnVector&) const;
};

.cpp 文件中的实现如下:

#include "cnVector.h"
/* constructor */   cnVector::cnVector(double x, double y, double z)
        : x(x), y(y), z(z) {
}

cnVector cnVector::cross (const cnVector& vOther) const {
    return cnVector(
        y * vOther.z + z * vOther.y,
        z * vOther.x + x * vOther.z,
        x * vOther.y + y * vOther.x );
}

现在,main.cpp 中的以下代码在第 3 行处中断,因为 >对 cnVector::cross(cnVector const&) const 的未定义引用;
请注意如何识别构造函数实现,而不是 cnVector::cross 方法。

int main() {
    cnVector v1(1, 0, 0), v2(0, 1, 0);
    cnVector v3 = v1.cross(v2);
}

我还收到一条错误消息警告:内联函数 'cnVector cnVector::cross(const cnVector&) const' 使用但从未定义
将实现复制到 main.cpp 中即可。

你能向我解释一下为什么我可以构造一个cnVector实例但是 其他方法的执行不被识别?

I'm having a headerfile called cnVector.h whose implementation is written in cnVector.cpp.
Those two files are located in the same directory.

cNormalCBP/
   + src/
       + cNormal/
           + cnUtils/
               - cnVector.h
               - cnVector.cpp
       - main.cpp

The header contains a simple class definition.

class cnVector {
    public:
        cnVector(double, double, double);

        inline cnVector cross(const cnVector&) const;
};

The implementation in the .cpp file is as follows:

#include "cnVector.h"
/* constructor */   cnVector::cnVector(double x, double y, double z)
        : x(x), y(y), z(z) {
}

cnVector cnVector::cross (const cnVector& vOther) const {
    return cnVector(
        y * vOther.z + z * vOther.y,
        z * vOther.x + x * vOther.z,
        x * vOther.y + y * vOther.x );
}

Now, the following code from main.cpp breaks at line 3 because of an undefined reference to cnVector::cross(cnVector const&) const;
Note how the constructor-implementation is recognized, but not the cnVector::cross method.

int main() {
    cnVector v1(1, 0, 0), v2(0, 1, 0);
    cnVector v3 = v1.cross(v2);
}

I also get an error-message warning: inline function 'cnVector cnVector::cross(const cnVector&) const' used but never defined.
Copying the implementation into main.cpp works.

Can you explain to me why I can construct a cnVector instance but
the implementation of other methods are not recognized ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜雨飘雪 2024-12-19 01:52:41

将内联函数移至头文件中。内联函数需要头文件中的完整定义,因为它们如何与其余代码集成。编译器(可能)会尝试在调用函数的所有位置插入代码,因此它需要在头文件中可见,类似于模板需要完全存在于头文件中。

Move your inline functions to your header file. Inline functions need their entire definitions in the header files because of how they integrate with the rest of your code. The compiler will (maybe) attempt to insert the code at all locations where the function is called, so it needs to be visible in the header file similar to how templates need to be entirely present in the header file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文