Connecting Tech Pros Worldwide Forums | Help | Site Map

Array Problems

kohvirus@gmail.com
Guest
 
Posts: n/a
#1: Oct 29 '05
Well after embaressing myself and posting in the wrong fourm, I found
my way to the right one and I'm hoping to seek some help. This is the
program without any modifications that I am making recently (because
I'll most likely make it blow up moreso).

I'm currently trying to write a program with an array but for the life
of me I can't seem to get the right syntax for the array. Here is the
program as follows:

#include <iostream>
#include <stdio.h>

void display(int A[] [], int m, int n)

{
int i;
int j;

std::cout << "Enter your value for m ";
std::cin >> m;
std::cout << "\n";

for (i =0; i< m; i++)

{ for (j=0; j < n; j++)

cout << " " << A[i][j];

cout << "\n";
}

}

Sorry if the way I write makes you cringe, still learning to to make
code 'neat'. Anyway, here are the error outputs I am getting and I am
unable to resolve any further:

fail.cpp:9: declaration of `A' as multidimensional array
fail.cpp:9: must have bounds for all dimensions except the first
fail.cpp: In function `void display(int, int)':
fail.cpp:21: `A' undeclared (first use this function)
fail.cpp:21: (Each undeclared identifier is reported only once
fail.cpp:21: for each function it appears in.)

Any help at narrowing the problem would be appreciated. I'm using this
to test for a CGI program I will be creating here soon.

Thanks!

red floyd
Guest
 
Posts: n/a
#2: Oct 29 '05

re: Array Problems


kohvirus@gmail.com wrote:[color=blue]
> Well after embaressing myself and posting in the wrong fourm, I found
> my way to the right one and I'm hoping to seek some help. This is the
> program without any modifications that I am making recently (because
> I'll most likely make it blow up moreso).
>
> I'm currently trying to write a program with an array but for the life
> of me I can't seem to get the right syntax for the array. Here is the
> program as follows:
>
> #include <iostream>
> #include <stdio.h>
>
> void display(int A[] [], int m, int n)
>
> {
> int i;
> int j;
>
> std::cout << "Enter your value for m ";
> std::cin >> m;
> std::cout << "\n";
>
> for (i =0; i< m; i++)
>
> { for (j=0; j < n; j++)
>
> cout << " " << A[i][j];
>
> cout << "\n";
> }
>
> }
>
> Sorry if the way I write makes you cringe, still learning to to make
> code 'neat'. Anyway, here are the error outputs I am getting and I am
> unable to resolve any further:
>
> fail.cpp:9: declaration of `A' as multidimensional array
> fail.cpp:9: must have bounds for all dimensions except the first
> fail.cpp: In function `void display(int, int)':
> fail.cpp:21: `A' undeclared (first use this function)
> fail.cpp:21: (Each undeclared identifier is reported only once
> fail.cpp:21: for each function it appears in.)
>
> Any help at narrowing the problem would be appreciated. I'm using this
> to test for a CGI program I will be creating here soon.
>
> Thanks!
>[/color]

You need to specify the second dimension for A, e.g. int
A[][SOME_CONSTANT];


The two error messages for line 9 are quite clear on this.

John Harrison
Guest
 
Posts: n/a
#3: Oct 29 '05

re: Array Problems


kohvirus@gmail.com wrote:[color=blue]
> Well after embaressing myself and posting in the wrong fourm, I found
> my way to the right one and I'm hoping to seek some help. This is the
> program without any modifications that I am making recently (because
> I'll most likely make it blow up moreso).
>
> I'm currently trying to write a program with an array but for the life
> of me I can't seem to get the right syntax for the array. Here is the
> program as follows:
>
> #include <iostream>
> #include <stdio.h>
>
> void display(int A[] [], int m, int n)
>
> {
> int i;
> int j;
>
> std::cout << "Enter your value for m ";
> std::cin >> m;
> std::cout << "\n";
>
> for (i =0; i< m; i++)
>
> { for (j=0; j < n; j++)
>
> cout << " " << A[i][j];
>
> cout << "\n";
> }
>
> }
>
> Sorry if the way I write makes you cringe, still learning to to make
> code 'neat'. Anyway, here are the error outputs I am getting and I am
> unable to resolve any further:
>
> fail.cpp:9: declaration of `A' as multidimensional array
> fail.cpp:9: must have bounds for all dimensions except the first
> fail.cpp: In function `void display(int, int)':
> fail.cpp:21: `A' undeclared (first use this function)
> fail.cpp:21: (Each undeclared identifier is reported only once
> fail.cpp:21: for each function it appears in.)
>
> Any help at narrowing the problem would be appreciated. I'm using this
> to test for a CGI program I will be creating here soon.
>
> Thanks!
>[/color]

You cannot pass an array to a function in C or C++. You use pointers
instead.

This syntax

void f(int a[])

is just another way of writing

void f(int* a)

In other words the first form is just a way of confusing newbies into
thinking that you can pass an array to a function in C++. Usually they
find out the truth when they try a two dimensinal array.

There are several things you could do at this point

1) You could accept that the second dimension must be a constant, e.g.

void f(int a[][10])

which of course is just another way of writing

void f(int (*a)[10])

Pointers again! Remember no way of passing an array to a function in C++.

2) You could learn about how to represent 2d arrays using pointers. In
this case your function would look like this

void f(int** a)

Trouble with this option is that your calling code would have to change
as well.

3) You could learn about vectors, you can pas a 2d vector to a function

void f(const std::vector< std::vector<int> >& a)

My advice would be option 3, stay away from pointers, they are difficult.

You might also be interrested in the FAQ

http://www.parashift.com/c++-faq-lit...html#faq-16.16

john
Jonathan Mcdougall
Guest
 
Posts: n/a
#4: Oct 29 '05

re: Array Problems


kohvirus@gmail.com wrote:[color=blue]
> Well after embaressing myself and posting in the wrong fourm, I found
> my way to the right one and I'm hoping to seek some help. This is the
> program without any modifications that I am making recently (because
> I'll most likely make it blow up moreso).
>
> I'm currently trying to write a program with an array but for the life
> of me I can't seem to get the right syntax for the array. Here is the
> program as follows:
>
> #include <iostream>
> #include <stdio.h>[/color]

<stdio.h> should be <cstdio> in C++. What's more, you don't need it
here.
[color=blue]
> void display(int A[] [], int m, int n)[/color]

Well that's illegal. Take a statement like

A[1][2] = 0;

and imagine A is a 3x3 array. That means you are accessing the third
column of the second row, which is equivalent to

A[1*row_length + 2] = 0;

Now, the compiler, in display() has no way to know the value of
"row_length". To do that, you must tell it:

void display(int A[][3], int m, int n)

You could also set the first dimension, but that's not necessary. The
compiler does not need to know how many rows there are.

"But that's a pain". Yes it is. Either use a plain pointer

void display(int *A, int m, int n)

and do the math yourself, as I did earlier, using "m" and "n" (these
are the dimensions, right?) or use a std::vector.
[color=blue]
>
> {
> int i;
> int j;[/color]

No. Always define variables as near its for use as possible.
[color=blue]
> std::cout << "Enter your value for m ";
> std::cin >> m;
> std::cout << "\n";[/color]
[color=blue]
> for (i =0; i< m; i++)[/color]

Here, you should define i:

for (int i=0; i<m; ++i)
[color=blue]
> { for (j=0; j < n; j++)[/color]

for (int j=0; j<n; ++j)

See

http://www.parashift.com/c++-faq-lit....html#faq-10.6
http://www.parashift.com/c++-faq-lit...html#faq-13.15

and browse the whole faq while you're there.
[color=blue]
>
> cout << " " << A[i][j];
>
> cout << "\n";
> }
>
> }
>
> Sorry if the way I write makes you cringe, still learning to to make
> code 'neat'. Anyway, here are the error outputs I am getting and I am
> unable to resolve any further:
>
> fail.cpp:9: declaration of `A' as multidimensional array
> fail.cpp:9: must have bounds for all dimensions except the first
> fail.cpp: In function `void display(int, int)':
> fail.cpp:21: `A' undeclared (first use this function)
> fail.cpp:21: (Each undeclared identifier is reported only once
> fail.cpp:21: for each function it appears in.)[/color]

That should be solved. However, I fail to see the point of this
program, so I cannot give you more advices.


Jonathan

Closed Thread


Similar C / C++ bytes