gpt4 book ai didi

c++ - LNK2005 : already defined error

转载 作者:行者123 更新时间:2023-11-28 07:48:15 24 4
gpt4 key购买 nike

我正在做一项学校作业,我遇到了这个奇怪的错误(我对 C++ 还很陌生)。

我应该找到1500到1900之间的第一个值。当我第一次构建它时,一切正常,但是当我下次构建它时,我得到这个错误:

error LNK2005: "bool __cdecl greaterThan1500SmallerThan1900(int)" (?greaterThan1500SmallerThan1900@@YA_NH@Z) already defined in Lab5.obj

如果我随后稍微更改代码(将谓词函数中的类型更改为 double),它会再次构建一次。

template<typename T>
T MyStlClass<T>::myFindIf(list<T> &theList) {

list<T>::iterator it = find_if(theList.begin(), theList.end(), greaterThan1500SmallerThan1900);
return *it;
}

bool greaterThan1500SmallerThan1900(int value){
return (value >= 1500 && value <= 1900);
}

我在这个网站上读到,这是因为我包含了“.cpp”文件,但另一方面,我也读到,当我使用时,我需要包含“.cpp”文件模板。

最佳答案

I have also read, that I need to include the ".cpp" file, when I am using templates.

为我们丢弃/否决/确定告诉您这样做的资源。

它这样做是有充分理由的,但建议是错误的,它让您直接到这个问题。

永远不要#include .cpp

您放置模板定义的文件应该被称为类似.ipp 而不是.cpp,这样您的IDE 就不会将它与“常规”混淆源文件并使用项目的其余部分构建它。这样的文件就像 .h 一样, #included.

关于c++ - LNK2005 : already defined error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14404981/

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