Bingo! World holds information on the entire 1000x1000 tile map after all. As soon as I commented that part out, it started accepting both implementations. Funny thing is, the stack overflow happens before the first line of code inside main is executed at all, before it even gets to "World W;".
Yeah, I'm quite the noob at this stuff. So... is there any way to keep this class large as it's supposed to be, but at the same time tell the compiler "don't query this object's address every time you access it, the address is always the same!"?