Search code examples
luacoronasdk

main.lua:45: attempt to index global 'heroClass' (a nil value) stack traceback: main.lua:45: in main chunk


i'm new to this and trying to create a NEW HERO from the subclass heroClass

code in CharacterClass.lua :

local CharacterClass = 
{
 name = " ",
 hp = " ",
 velocity = " ";
}


function CharacterClass:new(o, nameCharacter, hpCharacter, velocityCharacter)
  local o = o or {}
  setmetatable( o, self )
  self.__index = self 
  self.name = nameCharacter
  self.hp = hpCharacter
  self.velocity = velocityCharacter

  return o
end

-- CREATING HERO INHERIT

local heroClass = CharacterClass:new()
function heroClass:new (o, name, hp, velocity, playerId, color)
  local o = o or CharacterClass:new(o, name, hp, velocity)
  setmetatable(o, self)
  self.__index = self

  return o 
end

Code in main.lua

local CharacterClass = require( "CharacterClass" )

local heroClassMain = heroClass:new()

And I am getting this error after i run the code

main.lua:45: attempt to index global 'heroClass' (a nil value) stack traceback: main.lua:45: in main chunk 

PS : When I create a NEW CharacterClass in main, it works perfectly, but when I try to create a NEW heroClass (subclass) i receive the error !

Anyone know what's wrong ? Thank you !


Solution

  • Modify your CharacterClass.lua as follows:

    local CharacterClass = {
      name = " ",
      hp = " ",
      velocity = " ",
    }
    
    function CharacterClass:new(o, nameCharacter, hpCharacter, velocityCharacter)
      -- same as before
    end
    
    -- CREATING HERO INHERIT
    
    local heroClass = CharacterClass:new()
    
    function heroClass:new (o, name, hp, velocity, playerId, color)
      -- same as before
    end
    
    return {heroClass = heroClass, CharacterClass = CharacterClass }
    

    Now, when you use require in main.lua, a bit more needs to be done:

    local classModule = require "CharacterClass"
    local CharacterClass, heroClass = classModule.CharacterClass, classModule.heroClass
    local heroClassMian = heroClass:new()
    

    Previously, your heroClass subclass was not provided to the main.lua file. This was what caused the error traceback.