'char (*RtlpNumberOf(T (&)[N]))[N]': 无法从 'char *' 推导出 'T (&)[N]' 的模板参数

理查德·卡林斯

我最初编写了这段代码,它将 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 for 'T (&)[N]' from 'char *'我不明白这里的问题是什么。我尝试sizeof交替使用,但它没有正确复制。为什么在这种情况下我不能使用 ARRAYSIZE?

灌木丛

在第一段代码中,您调用的ARRAYSIZE是实际数组。在第二个中,您将 a 传递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]);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

'char *'的模板参数推导

来自分类Dev

'char*' 的模板参数推导

来自分类Dev

不能从const char *推导std :: basic_string作为功能模板的参数

来自分类Dev

错误C2664:“ errno_t strcpy_s(char *,rsize_t,const char *)”:无法将参数2从“ char [512]”转换为“ rsize_t”

来自分类Dev

C ++错误:推导了参数'T'字符串与const char的冲突类型*

来自分类Dev

无法将参数1从char转换为strcmp的const char

来自分类Dev

创建 std::tuple 时从 const char* 或 char* 推导出 std::string

来自分类Dev

模板参数推导出错

来自分类Dev

错误:无法将参数1的const字符串转换为const char *到size_t strlen(const char *)

来自分类Dev

错误:无法将参数1的const字符串转换为const char *到size_t strlen(const char *)

来自分类Dev

如何避免“在部分专业化中无法推导出模板参数”

来自分类Dev

无法将char ***作为参数传递

来自分类Dev

无法从'char **'转换为'char * []'

来自分类Dev

模板<typename T = char>是否正确?

来自分类Dev

具有模板参数大小的const char数组与char指针

来自分类Dev

模板模板函数中的默认const char *模板参数

来自分类Dev

'char const * str'作为模板参数

来自分类Dev

C++:无法在使用类型条件的模板函数中用类型为“double”的左值初始化“char*”类型的参数

来自分类Dev

const(char)*无法修改

来自分类Dev

const(char)*无法修改

来自分类Dev

无法将参数'1'的'std :: basic_string <char>'转换为'const char *'到'int system(const char *)'

来自分类Dev

无法将参数'2'的'std :: string {aka std :: basic_string <char>}'转换为'char *'到'int Save(int,char *)'

来自分类Dev

Haskell类型错误“无法将类型'Char'与't0 [Char]'相匹配”

来自分类Dev

无法将'char **'转换为'char *'

来自分类Dev

无法将“char (*)[200]”转换为“char**”

来自分类Dev

错误:无法将参数'1'的'std :: basic_string <char> :: iterator ...'转换为'const char * ...'

来自分类Dev

C / C ++ strcmp无法将参数1从'char'转换为'const char *'

来自分类Dev

错误:无法将char转换为wchat_t *

来自分类Dev

char []到uint32_t无法正常工作

Related 相关文章

  1. 1

    'char *'的模板参数推导

  2. 2

    'char*' 的模板参数推导

  3. 3

    不能从const char *推导std :: basic_string作为功能模板的参数

  4. 4

    错误C2664:“ errno_t strcpy_s(char *,rsize_t,const char *)”:无法将参数2从“ char [512]”转换为“ rsize_t”

  5. 5

    C ++错误:推导了参数'T'字符串与const char的冲突类型*

  6. 6

    无法将参数1从char转换为strcmp的const char

  7. 7

    创建 std::tuple 时从 const char* 或 char* 推导出 std::string

  8. 8

    模板参数推导出错

  9. 9

    错误:无法将参数1的const字符串转换为const char *到size_t strlen(const char *)

  10. 10

    错误:无法将参数1的const字符串转换为const char *到size_t strlen(const char *)

  11. 11

    如何避免“在部分专业化中无法推导出模板参数”

  12. 12

    无法将char ***作为参数传递

  13. 13

    无法从'char **'转换为'char * []'

  14. 14

    模板<typename T = char>是否正确?

  15. 15

    具有模板参数大小的const char数组与char指针

  16. 16

    模板模板函数中的默认const char *模板参数

  17. 17

    'char const * str'作为模板参数

  18. 18

    C++:无法在使用类型条件的模板函数中用类型为“double”的左值初始化“char*”类型的参数

  19. 19

    const(char)*无法修改

  20. 20

    const(char)*无法修改

  21. 21

    无法将参数'1'的'std :: basic_string <char>'转换为'const char *'到'int system(const char *)'

  22. 22

    无法将参数'2'的'std :: string {aka std :: basic_string <char>}'转换为'char *'到'int Save(int,char *)'

  23. 23

    Haskell类型错误“无法将类型'Char'与't0 [Char]'相匹配”

  24. 24

    无法将'char **'转换为'char *'

  25. 25

    无法将“char (*)[200]”转换为“char**”

  26. 26

    错误:无法将参数'1'的'std :: basic_string <char> :: iterator ...'转换为'const char * ...'

  27. 27

    C / C ++ strcmp无法将参数1从'char'转换为'const char *'

  28. 28

    错误:无法将char转换为wchat_t *

  29. 29

    char []到uint32_t无法正常工作

热门标签

归档