我在搜索结构数组时遇到问题。当我通过调试器运行此代码时,for循环不会在数组中前进,而是会卡在数组的第一个元素上并不断地将第一个值与configSource变量进行比较。数组中有44个元素。看起来我正确地进行了搜索,我是否应该在由结构组成的数组上使用不同的语法?
我基本上是初学者,非常感谢任何协助。
int arraySize;
std::wstring configSource;
struct NamedGuid
{
std::wstring name;
GUID const *guid;
};
NamedGuid format_guid_names[] =
{
{TEXT("CompNTSCCCIR"), &INPUT_CompNTSCCCIR},
{TEXT("CompNTSCSqPixel"), &INPUT_CompNTSCSqPixel},
{TEXT("SVideoNTSCCCIR"), &INPUT_SVideoNTSCCCIR},
.
etc...
.
{TEXT("DigitalHD"), &INPUT_DigitalHD},
{TEXT("HDSDI"), &INPUT_HDSDI},
{TEXT("HDSDI10Bit"), &INPUT_HDSDI10Bit},
{TEXT(""), nullptr}
};
long OpenDevice (std::wstring argTemps)
{
//A lot of code which isn't relevant
//Parses the command line arguments and creates a string that
//is searched for in the array
configSource = parseArgs(argTemp);
int arraySize = _countof(format_guid_names);
GUID sourceGuid = get_format_guid_by_name(configSource, arraySize);
hSrc = dpSetDeviceInput(hDevice, &sourceGuid, 0, 0);
//More code that isn't relevant
}
GUID get_format_guid_by_name(std::wstring configSource, int arraySize)
{
for (int index = 0; index < arraySize; index++)
{
if (format_guid_names[index].name == configSource)
return *format_guid_names[index].guid;
}
return *format_guid_names[arraySize - 1].guid;
}
编辑因为我意识到我忘记了将数组的大小传递给函数,但仍然会出现同样的问题。
答案 0 :(得分:0)
您的get_format_guid_by_name函数未命名其输入参数,这就是您必须分配全局变量才能调用该函数的原因。您应该删除全局定义并将输入参数命名为函数:
GUID get_format_guid_by_name(const std::wstring& configSource, int arraySize)
虽然这并没有解决你的问题(只是让它更容易调试)。
你说&#39;它会卡在数组的第一个元素上并不断地将第一个值与configSource变量进行比较&#39;。这告诉我,configSource没有== format_guid_names数组中的任何名称。你的for循环看起来正确。
如果我正在调试这个循环,我会在&#39; if&#39;之前将index,format_guid_names [index] .name和configSource打印到控制台。声明检查。这将告诉你究竟是什么被比较和以什么顺序。