On cgn
There are two concepts at play here: the change operator c and the motion or text-object it accepts. You may know that cw changes the text covered by the motion w, so roughly "change to the next word." (Change in this context means "delete and start Insert mode"; such a change is ended when you exit Insert mode with Escape.)
The argument to c in this case is the text-object gn, which is a rather special object that selects the next occurrence of the current search. So if you've searched /foo, cgn will jump to the next foo, delete it, and leave you in Insert mode. This is kind of like how n jumps to the match.
This is particularly handy for refactoring in a single file, because * searches the word under the cursor. So *cgnbar<Esc> when the cursor is on foo changes the next occurrence of foo to bar. And when you repeat the change with ., the next occurrence is changed in the same way, and so on.
Other Approaches
One draw back is that the search is buffer-specific, so if you're changing an exported name *cgn is slightly less convenient. You'll need to load the files that contain that name (say, in to the arg list or buffer list), and use :argdo normal! 9999. or some such hackery.
Instead, you might want to try :grep foo and :cdo substitute/foo/bar or similar (alternatives include :vimgrep, :cfdo with :%substitute, the /g or /c flags, or even just :cnext with . as appropriate).
Having unit tests or a compiler available to check the changes helps with the feedback loop, especially if you've already got :make working. This makes yet another approach: make the initial change to the export, then :make and use the quickfix list as before to correct the errors. Repeat until finished.