int getWinnableTwo(char thisArray[9]) {
char oneArray[9];
std::copy(std::begin(thisArray), std::end(thisArray), std::begin(oneArray));
由于某种原因,这不会编译,而使用全局数组。我想这是因为数组是通过引用传递的,但是我能做些什么才能使它工作?
错误:
不匹配的类型'const std :: valarray <_Tp>'和'char *'
将数组作为参数传递给函数时,它会衰减为原始指针。如果你将一个不同大小的数组传递给你的函数,你可以看到这个,你可能会惊讶于它编译:
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;
}
试试这个:
int getWinnableTwo(char thisArray[9])
{
char oneArray[9];
std::copy(thisArray, thisArray + 9, oneArray);
return 0;
}
您可以使用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);
}