【发布时间】:2025-12-28 16:00:16
【问题描述】:
我正在尝试用 C++ 编写井字游戏,但每当我运行它时,我都会收到一条错误消息:
TicTacToe.cpp: In instantiation of ‘void copy_array(T*, T*) [with T = std::basic_string<char>]’:
TicTacToe.cpp:115:25: required from here
TicTacToe.cpp:93:3: error: no match for ‘operator*’ in ‘**(new_arr + ((sizetype)(((long unsigned int)i) * 8ul)))’
它指向这个函数:
86 template<class T>
87 void copy_array(T old_arr[], T *new_arr)
88 {
89 int size = sizeof(old_arr)/sizeof(old_arr[0]);
90 for(int i = 0; i < size; i++)
91 {
92 *new_arr[i] = old_arr[i];
93 }
94 }
一段代码:
114 string copy[9];
115 copy_array(board, copy);
谁能给我解释一下是什么导致了错误以及如何解决它?
【问题讨论】:
-
在编程方面,我看不出这个问题与井字游戏有什么关系。
-
两件事。 (a) 谁让你在这里做
int size = sizeof(old_arr)/sizeof(old_arr[0]);? (b) 你有没有替我朝他们脸上开枪? -
不要使用那种愚蠢的 sizeof 技巧。这很糟糕,因为它让您认为它有效,然后却无效。使用此处的 size 函数:gist.github.com/3959946,或完全停止使用数组(更好的选择包括
std::vector或std::array,具体取决于使用情况)。不要接受[]参数。这些不是数组,而是指针。 -
@R.MartinhoFernandes:请您的
size函数模板实例化应采用const。而且,是的,我知道。
标签: c++ arrays templates pointers operators