gpt4 book ai didi

c++ - 在 Code::Blocks 中链接 .cpp 文件的问题

转载 作者:行者123 更新时间:2023-11-30 04:32:06 28 4
gpt4 key购买 nike

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

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

header 包含一个简单的类定义。

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 中即可。

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

最佳答案

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

关于c++ - 在 Code::Blocks 中链接 .cpp 文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7894973/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com