代码:
void case1();
void case2();
void case3();
void case4();
void case5();
//Global variables
const int MAXROW = 5;
const int MAXCOL = 5;
int main()
{
........
...
MENU(with do while)
}
void case1()
{
int A[MAXROW][MAXCOL] = { 0 };
for (int r = 0; r < MAXROW; ++r)
for (int c = 0; c < MAXCOL; ++c) {
cout << "\n A[" << r << "][" << c << "]= ";
cin >> A[r][c];
}
}
void case2()
{
...
}
//Function to find average of negatives
void case3()
{
int negNumber = 0;
double average = 0;
for (int r = 0; r < 6; ++r) {
for (int c = 0; c < 6; ++c) {
if...
}
void case4()
{//Function to find product of numbers different from 0
...
}
void case5()
{
...
}
如您所见,输入数组位于case1()
。我想知道如何在所有其他函数中使用此数组(case2
,case3
,case4
,case5
)。
我该怎么做?
如何在菜单中调用它们?例如case2()
:
case '2': {
case2(......);
现在我的错误列表中充满了
等消息'A':未声明的标识符
答案 0 :(得分:0)
您可以通过引用传递数组,例如:
void case1(int (&A)[MAXROW][MAXCOL])
{
// do use array here
}
答案 1 :(得分:0)
您应该在main
函数中声明您的数组,<{1}}函数中的而不是。在C ++中,一旦执行从定义了对象的块中传出,对象(包括数组)就会被销毁。所以在你的代码中
case...
一旦执行离开函数void case1()
{
int A[MAXROW][MAXCOL] = { 0 };
...
}
,数组case1
就会被销毁。当它抱怨未知名称A
时,编译器会尝试告诉您。这不是你想要的!相反,这样做:
A
在这里,您将数组int main()
{
int A[MAXROW][MAXCOL] = { 0 };
...
// your menu code
...
switch (menu_result)
{
case 1: case1(A); break;
case 2: case2(A); break;
case 3: case3(A); break;
case 4: case4(A); break;
case 5: case5(A); break;
}
}
传递给您的函数。为了使这段代码有效,你应该声明你的函数接收数组作为参数:
A
(代码取自this回答)
BTW传递引用语法很少用于数组,因为即使省略了引用符号void case1(int (&A)[MAXROW][MAXCOL])
{
// do use array here
}
,代码也能正常工作:
&
在这种情况下,您还可以省略数组的外部维度:
void case2(int A[MAXROW][MAXCOL]) // also works; does the same
{
}
这两个变体也起作用的原因is a bit technical - 在这些变体中,传递的东西是指向一维数组的指针,而不是对二维数组的引用。我想避免提及它们,但它确实不可能,因为它们被广泛使用(可能是因为它们可以由C编译器编译)。