Getting warning: undefined or private

Even with all the correct imports and the mix file configured correctly, I can’t generate the executable and it gives the following error:

warning: DesafioCumbuca.main/1 is undefined or private. Did you mean:

      * main/0

└─ /home/runner/work/elixir/elixir/lib/mix/lib/mix/tasks/escript.build.ex:396: :desafio_cumbuca_escript.main/1

desafio_cumbuca.ex file:

`
defmodule DesafioCumbuca do
  alias InterfaceUsuario
  alias ObterNomes
  alias EnumerarNomes
  def main() do
    InterfaceUsuario.mostrar_boas_vindas()
    nomes = ObterNomes.obter_nomes([])
    nomes_ordenados = EnumerarNomes.enumerar(nomes)
    InterfaceUsuario.mostrar_resultado(nomes_ordenados)
  end
end`

mix file:

defmodule DesafioCumbuca.MixProject do
  use Mix.Project

  def project do
    [
      app: :desafio_cumbuca,
      version: "0.1.0",
      elixir: "~> 1.17",
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      escript: escript()
    ]
  end
  def escript do
    [main_module:  DesafioCumbuca]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      # {:dep_from_hexpm, "~> 0.3.0"},
      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
    ]
  end
end

To generate the executable file I opened the project page and typed “mix compile” and then “mix escript.build”

You need to define DesafioCumbuca.main/1. Currently you’ve defined DesafioCumbuca.main/0. Changing def main() do to something like def main(_arg) do should help.

4 Likes

This instruction generated the executable op without any problems, I will still do some tests, but this solution seemed to solve everything!

2 Likes

It seems you could benefit from reading a few minutes about Elixir’s function arity.

1 Like