int getWinnableTwo(char thisArray[9]) {
char oneArray[9];
std::copy(std::begin(thisArray), std::end(thisArray), std::begin(oneArray));
由于某种原因,使用全局数组时无法编译。我想这是因为数组是通过引用传递的,但是我该怎么做才能使这项工作呢?
错误:
不匹配的类型“ const std :: valarray <_Tp>”和“ char *”
答案 0 :(得分:4)
当您将数组作为参数传递给函数时,它将衰减为原始指针。如果将不同大小的数组传递给函数,您会看到这一点,它可能会感到惊讶:
char test[1];
getWinnableTwo(test);
您甚至不需要传递数组:
char test;
getWinnableTwo(&test);
您的功能等同于:
int getWinnableTwo(char* thisArray) {
char oneArray[9];
std::copy(std::begin(thisArray), std::end(thisArray), std::begin(oneArray));
return 0;
}
您不能在原始指针上调用std::begin
和std::end
,因为编译器无法知道指针指向的数据大小。
一种解决方案是通过引用传递数组:
int getWinnableTwo(char(&thisArray)[9]) {
char oneArray[9];
std::copy(std::begin(thisArray), std::end(thisArray), std::begin(oneArray));
return 0;
}
这还有一个额外的好处,即您现在只能传递char [9]
,而不能传递任何其他类型。
更多的c ++解决方案是使用std::array
来代替,您可以选择通过引用或值来传递它,而不会衰减到指针:
int getWinnableTwo(std::array<char, 9>& thisArray) {
std::array<char, 9> oneArray;
std::copy(std::begin(thisArray), std::end(thisArray), std::begin(oneArray));
return 0;
}
答案 1 :(得分:3)
尝试这个:
int getWinnableTwo(char thisArray[9])
{
char oneArray[9];
std::copy(thisArray, thisArray + 9, oneArray);
return 0;
}
答案 2 :(得分:2)
您可以使用std :: array来实现此目的。
#include <array>
#include <algorithm>
int getWinnableTwo(const std::array<int, 9>& arrayToCopy) {
std::array<int, 9> destinationArray;
std::copy(std::begin(arrayToCopy), std::end(arrayToCopy), std::begin(destinationArray));
}
int main()
{
std::array<int, 9> arrayToCopy{ 1,2,3,4,5,6,7,8,9 };
int result = getWinnableTwo(arrayToCopy);
}