【发布时间】:2020-07-24 08:24:50
【问题描述】:
以下代码在 BDS 2006 中没有问题。 在 Codegear RAD studio 2007 中,make 会产生错误。
我搜索并猜测它与类型转换有关,但没有发现任何线索。 代码的目的是检查一个值是否存在于数组中。 任何建议表示赞赏。
#include <algorithm>
#include <iostream>
using namespace std;
enum E_TRIGGER_MODE
{
TRIGGER_MODE_SINGLE = 0,
TRIGGER_MODE_NORMAL,
TRIGGER_MODE_AUTO,
TRIGGER_MODE_CONTINUOUS
};
static enum E_TRIGGER_MODE eMode[] =
{ TRIGGER_MODE_AUTO, TRIGGER_MODE_NORMAL,
TRIGGER_MODE_SINGLE, TRIGGER_MODE_CONTINUOUS };
namespace Utils
{
template<class Type, class Element, int n>
bool in_group(const Type value, const Element (&array)[n])
{
return std::find(array, array+n, value) != array+n;
}
}
void main(void)
{
int mode = TRIGGER_MODE_AUTO;
if (Utils::in_group(mode, eMode))
cout << "in group OK\n";
else
cout << "in group FAIL\n";
}
错误信息:
[BCC32 Error] File3.cpp(44): E2285 Could not find a match for 'std::find<_InIt,_Ty>(const E_TRIGGER_MODE *,const E_TRIGGER_MODE *,const int)'
编辑:
代码来自使用 BDS2006 和 .bdsproj 文件创建的包。当前版本的 RAD studio(10.x) 无法毫无问题地打开此项目文件。这就是我尝试 RAD studio 2007 的原因
【问题讨论】:
-
快速提醒一下,今天的日期是 2020 年 7 月 24 日...换句话说,您正在使用一个 非常 过时的编译器,并且
std::find可能是在 C++11 中引入的。 -
Works for me 修复
main()后。 -
@dandan78 不,
std::find存在于 C++03 或 C++98 -
这看起来像是编译器的问题,您的代码是正确的(
*array的类型为E_TRIGGER_MODE,可转换为int)。您的编译器是否没有提供有关此错误的更多信息?它尝试了哪些重载?您可以尝试强制转换,但是...此时您应该真正获得现代编译器。 -
让我解释一下为什么我使用这么旧的编译器。代码来自使用 BDS2006 和 .bdsproj 文件创建的包。当前版本的 RAD studio(10.x) 无法打开此项目文件。这就是我尝试 RAD studio 2007 的原因。
标签: c++ borland-c++