I have a class header file called Grid.h that contains the following 2 private data object:
vector<int> column;
vector<vector<int>> row;
And a public method whose prototype in Grid.h is such:
int getElement (unsigned int& col, unsigned int& row);
The definition of above mentioned function is defined as such in Grid.cpp:
int getElement (unsigned int& col, unsigned int& row)
{
return row[row][col] ;
}
When I run the program, I get this error:
error C2109: subscript requires array or pointer type
Whats going wrong?
In the line
return row[row][col];
the firstrow
is theint&
, not thevector
.The variable declared in the inner scope is shadowing the variable in the outer scope, so the compiler is trying to index an
int
rather than avector
, which it obviously can't do.You should fix your variable names so that they don't conflict.
EDIT: Also, while the error that you're getting indicates that the compiler is finding the wrong
row
variable, as A. Levy points out, you also have a problem with the declaration of yourvector
, so even if you fix the variable names, if you have indeed declared thevector
as shown here, it won't compile. Nested templates need spaces between the>
symbols, otherwise the compiler will read>>
as a right-shift operator rather than part of a template declaration. It needs to beor
In addition, as you're doing this in a header file, you're going to need to tack the
std::
tag on the front of anything from the std namespace - such asvector
. If it were in a cpp file, then you could useusing namespace std;
but that would be very bad to do in a header file (since it would pollute the global namespace). Without thestd::
tag or theusing
statement, the compiler won't recognizevector
.I think you want something like this... (although I cannot imagine why :-))
It appears to me (although you may need to verify this on your own, I don't feel like writing up a test application) that the problem is coming from the fact that your parameter contains a named
row
and your class has an inner variablerow
and there is a naming conflict.You may need to qualify which row you're using. Consider:
This is probably not the index problem, but you also need a space between the nested angle brackets in your vector of vectors type declaration. C++ compilers have a hard time telling the difference between nested template types and the right bit shift operator.
Example:
This is what you need: