Re: Compilation Error
* Sunil Varma:
other.cpp
----------------
int arr[10] = {0};
OK.
main.cpp
----------------
#include <iostream>
using namespace std;
extern int arr[];
OK.
void main()
The result type of 'main' must be 'int', both in C and C++.
No other result type is allowed.
If your compiler accepts 'void' then the compiler is non-conforming (one would
guess that you're using Microsoft's Visual C++).
{
cout<<sizeof(arr)<<endl;
}
When I try to build the above code, I'm getting the following
compilation error.
f:\programs\nest\nest\main.cpp(23) : error C2070: 'int []': illegal
sizeof operand
Yes, the size is not known locally in 'main'.
I would like to know the reason why I get a compilation error.
When I change the extern to
extern int *arr;
the code compiles properly.
But only gives you the size of a pointer, not of the array.
For what you appear to want a reasonable solution is to use 'std::vector', and
to avoid running into the static initialization order fiasco (see the FAQ)
provide it via e.g. a Meyers' singleton, like
<code file="other.cpp">
#include <vector>
std::vector<int>& arr()
{
static std::vector<int> theArray( 10 );
return theArray;
}
</code>
<code file="main.cpp">
#include <vector>
#include <iostream>
std::vector<int>& arr();
int main()
{
using namespace std;
cout << arr().size() << endl;
}
</code>
*However*, global variables, which this essentially is, are generally Very
Evil(TM) and should be avoided.
It's also a good idea to provide a header for a separately compiled file or set
of files like that.
What book are you using that doesn't explain use of 'std::vector' and doesn't
explain use of headers and doesn't explain the evilness of global variables?
Cheers & hth.,
- Alf