gpt4 book ai didi

c++ - 将仅 header 库包含到多个文件中会产生链接器错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:51 26 4
gpt4 key购买 nike

我正在使用仅 header 的单文件“库”将文件中的 .obj 模型加载到图形程序中。弹出了一个简单的链接器错误:

LNK2005 "Info here" already defined in main.obj

现在我知道这意味着什么,通常我会继续将实现移到一个单独的文件中。然而,这是一个比我聪明得多的人提供的文件,因此依赖权威我希望它能正常工作。

它只提示 vector 乘法运算符重载和其他函数负载中的单个函数:

glm::vec3 operator*(const float& left, const glm::vec3& right){
return glm::vec3(right.x * left, right.y * left, right.z * left);
}

bool inTriangle(glm::vec3 point, glm::vec3 tri1, glm::vec3 tri2, glm::vec3 tri3)
{
// Starting vars
glm::vec3 u = tri2 - tri1;
glm::vec3 v = tri3 - tri1;
glm::vec3 w = point - tri1;
glm::vec3 n = glm::cross(u, v);

float y = glm::dot(glm::cross(u, w), n) / glm::dot(n, n);
float b = glm::dot(glm::cross(u, w), n) / glm::dot(n, n);
float a = 1 - y - b;

// Projected point
glm::vec3 p = (a * tri1) + (b * tri2) + (y * tri3);

if (a >= 0 && a <= 1
&& b >= 0 && b <= 1
&& y >= 0 && y <= 1)
{
return true;
}
else
return false;
}

这些函数有什么特别之处吗?

文件来自OBJ Loader ,我对其进行了修改,只是为了使用我目前在其他地方使用的 glm vector 和实用程序。

最佳答案

Is there something special about these functions?

是的,它们不像 algorithm 命名空间中的所有其他自由函数那样被标记为 inline

当您在头文件中定义一个函数时,您需要将其标记为内联,以便它可以在多个翻译单元(包含在多个源文件中)中定义而不会出错。

关于c++ - 将仅 header 库包含到多个文件中会产生链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49542632/

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