我正在创建一个功能compare_arrays,以检查预定义数组中的元素是否相似。我想使用指针,并通过引用将数组传递给函数。这是我到目前为止编写的函数,但是pylint在第二个if循环中给我一个错误,指出未定义* arry1和* arry2。有人可以帮助我更好地理解此错误。
此外,我该如何调用该函数并传入arr_one,arr_two等。...
#include <iostream>
using namespace std;
int size1 = 3, size2 = 3;
int arr_one[] = {1, 2, 3};
int arr_two[] = {1, 2, 3};
int main(){
bool compare_arrays( int *arry1, int size1, int *arry2, int size2);{
if (size1 != size2){
return false;
}
for(int i=0; i < size1; i++);{
if (*arry1 != *arry2);{
return false;
}
}
*arry1++;
*arry2++;
return true;
}
}
答案 0 :(得分:2)
代码中最大和主要的问题是在;
的末尾包含compare_arrays
。您实际上正在做的是声明一个函数compare_arrays
,然后创建一个单独的作用域,这就是为什么未定义arry1
的原因。如果您删除了该分号,则您的错误将更有意义:
bool compare_arrays( int *arry1, int size1, int *arry2, int size2) {
现在,编译器会告诉您无法在函数内定义函数,这很容易解决。将compare_arrays
移动到main
之外:
bool compare_arrays( int *arry1, int size1, int *arry2, int size2){
if (size1 != size2){
return false;
}
for(int i=0; i < size1; i++);{
if (*arry1 != *arry2);{
return false;
}
}
*arry1++;
*arry2++;
return true;
}
int main() {
}
现在可以编译,但可能不会按预期运行,因为第二个if
语句的末尾有一个错误的分号。这意味着将分号视为来自if
的表达式,那么您将始终return false;
。通过删除分号来解决此问题:
for (int i = 0; i < size1; i++) {
现在您可以像这样简单地在main中调用代码:
int main() {
if (compare_arrays(arr_one, size1, arr_two, size2)) {
std::cout << "arrays are equal\n";
}
}
但是,您可以使用std::vector
来简化整个过程:
#include <vector>
#include <iostream>
int main() {
std::vector<int> v1 = { 1, 2, 3 };
std::vector<int> v2 = { 1, 2, 3 };
if (v1 == v2)
std::cout << "arrays are equal\n";
}
答案 1 :(得分:0)
您将compare_arrays函数主体放置在main函数内部。从主体中删除函数主体,然后从主体函数内部调用它。另外,将分号放在if语句和函数标头之后,这是错误的。您的代码应该是这样
#include <iostream>
using namespace std;
int size1 = 3, size2 = 3;
int arr_one[] = { 1, 2, 3 };
int arr_two[] = { 1, 2, 3 };
bool compare_arrays(int *arry1, int size1, int *arry2, int size2) {
if (size1 != size2) {
return false;
}
for (int i = 0; i < size1; i++) {
if (*arry1 != *arry2) {
return false;
}
}
*arry1++;
*arry2++;
return true;
}
int main() {
cout << compare_arrays(arr_one, size1, arr_two, size2) << endl;
}