In reply to mpettigr:
Verilog/SystemVerilog has a global elaboration stage, not a linking stage because of the hierarchical references and parameter overrides in its language.
The linking stage in C++ still requires a fully specified prototype of a type before you can generate code that can be linked.