I've seen two examples of how to define the table name of multi_index:

  • N(tablename)
  • "tablename"_n (source)

Initially I tried using the former, but resulted in the below compilation error. I have since been using the latter without any issue. Are both supported or was this changed in a subsequent release?

error: use of undeclared identifier 'tablename'
        typedef eosio::multi_index<N(tablename), tablerow> tablerow_index;

For reference, I've been using EOSEasyContract for compilation, I'm not sure if this makes any difference. My understanding is it should as it's using a Docker container to run the compilation.

1 Answer 1


The N macro was replaced with the _n operator. It is one of the breaking changes introduced recently. Here is the complete list, https://github.com/EOSIO/eosio.cdt/blob/master/README.md

Removal of the N macro. The ""_n operator or the name constructor should be used as a type safe replacement. Example: N(foo) -> "foo"_n, or N(foo) -> name("foo").

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.