gpt4 book ai didi

c++ - 'char (*RtlpNumberOf(T (&)[N]))[N ]': could not deduce template argument for ' T (&)[N ]' from ' char *'

转载 作者:行者123 更新时间:2023-11-28 04:37:12 25 4
gpt4 key购买 nike

我最初写这段代码,它将 10 个 const char[] 组合成一个大的 char[]。它工作正常。

char total[1000000];
memcpy(total, myData0, ARRAYSIZE(myData0));
memcpy(&total[ARRAYSIZE(myData0)], myData1, ARRAYSIZE(myData1));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1)], myData2, ARRAYSIZE(myData2));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2)], myData3, ARRAYSIZE(myData3));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2) + ARRAYSIZE(myData3)], myData4, ARRAYSIZE(myData4));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2) + ARRAYSIZE(myData3) + ARRAYSIZE(myData4)], myData5, ARRAYSIZE(myData5));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2) + ARRAYSIZE(myData3) + ARRAYSIZE(myData4) + ARRAYSIZE(myData5)], myData6, ARRAYSIZE(myData6));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2) + ARRAYSIZE(myData3) + ARRAYSIZE(myData4) + ARRAYSIZE(myData5) + ARRAYSIZE(myData6)], myData7, ARRAYSIZE(myData7));
memcpy(&total[ARRAYSIZE(myData0) + ARRAYSIZE(myData1) + ARRAYSIZE(myData2) + ARRAYSIZE(myData3) + ARRAYSIZE(myData4) + ARRAYSIZE(myData5) + ARRAYSIZE(myData6) + ARRAYSIZE(myData7)], myData8, ARRAYSIZE(myData8));

但我认为我可以使用数组并循环遍历来显着清理它。

char total[1000000];
char* myarray[10] = { myData0, myData1, myData2, myData3, myData4, myData5, myData6, myData7, myData8, myData9 };

for (int i = 0; i < ARRAYSIZE(myarray); i++)
{
memcpy(total, &myarray[i], ARRAYSIZE(myarray[i]));
}

我以为我做得很好,但这段代码无法编译。我在 ARRAYSIZE(myarray[i]) 下遇到错误,它显示为 'char (*RtlpNumberOf(T (&)[N]))[N]': could not deduce template argument对于来自“char *”的“T (&)[N]”。我不明白这里的问题是什么。我尝试使用 sizeof 替代,但它没有正确复制。为什么在这种情况下我不能使用 ARRAYSIZE?

最佳答案

在第一段代码中,您对实际数组调用了 ARRAYSIZE。在第二个中,您将 char * 传递给它。这个宏(实际上是作为其基础的 RtlpNumberOf 宏)需要一个数组。数组和指针不是一回事,这是一个完美的例证。

创建第二个数组,其大小与其他数组相同,并在调用 memcpy 时使用它:

char total[1000000];
char* myarray[10] = { myData0, myData1, myData2, myData3, myData4,
myData5, myData6, myData7, myData8, myData9 };
size_t myarray_sizes[10] = { ARRAYSIZE(myData0), ARRAYSIZE(myData1), ARRAYSIZE(myData2),
ARRAYSIZE(myData3), ARRAYSIZE(myData4), ARRAYSIZE(myData5),
ARRAYSIZE(myData6), ARRAYSIZE(myData7), ARRAYSIZE(myData8),
ARRAYSIZE(myData9) };


for (int i = 0; i < ARRAYSIZE(myarray); i++)
{
memcpy(total, &myarray[i], myarray_sizes[i]);
}

关于c++ - 'char (*RtlpNumberOf(T (&)[N]))[N ]': could not deduce template argument for ' T (&)[N ]' from ' char *',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51073640/

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