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 firstrowis 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
intrather 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
rowvariable, 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 thevectoras 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 theusingstatement, the compiler won’t recognizevector.