undeclared function?

CaptDeath

New Member
Reaction score
103
when i put a jass function
JASS:
function New_FM takes integer X returns nothing
call BJDebugMsg("Introducing"+Strings(4,X)+"the newest "+Strings(0,1))
endfunction

it says that New_FM
is undeclared should i put it into a blank custom text trigger?
like i did with this


JASS:
function Strings takes integer A,integer B returns string

		local string Ret
		local string CO
	if A == 0 then // Classes
		if B == 0 then
			set Ret = "Basic Mage"
			return Ret
		endif
		if B == 1 then
			set Ret = "Fire Mage"
			return Ret
		endif
		if B == 2 then
			set Ret = "Water Mage"
			return Ret
		endif		
		if B == 3 then
			set Ret = "Time Mage"
			return Ret
		endif
		if B == 4 then
			set Ret = "Earth Mage"
			return Ret
		endif		
		if B == 5 then
			set Ret = "Wind Mage"
			return Ret
		endif		
		if B == 6 then
			set Ret = "AnitTime Mage"
			return Ret
		endif		
	// endclasses
	endif 
	
	if A == 1 then // Places
		if B == 0 then
			set Ret =  "Osusia"
			return Ret
		endif
		if B == 1 then
			set Ret = "Anicia"
			return Ret
		endif
		if B == 2 then
			set Ret = "Ardonia"
			return Ret
		endif
		if B == 3 then
			set Ret = "Ageocia"
			return Ret
		endif
		if B == 4 then
			set Ret ="Buralia"
			return Ret
		endif
		if B == 5 then
			set Ret ="Ildicia"
			return Ret
		endif
		if B == 6 then
			set Ret ="Arocia"
			return Ret
		endif
		if B == 7 then
			set Ret ="Warecia"
			return Ret
		endif
		if B == 8 then
			set Ret ="Morycia"
			return Ret
		endif
		if B == 9 then
			set Ret ="Estelia"
			return Ret
		endif
		// endPlaces
	endif
	
	if A == 2 then // citys
		set CO = "Capital of "
			if B == 0 then
			set Ret =CO+Strings(1,0)
			return Ret
		endif
		if B == 1 then
			set Ret =CO+Strings(1,1)
			return Ret
		endif
		if B == 2 then
			set Ret =CO+Strings(1,2)
			return Ret
		endif
		if B == 3 then
			set Ret =CO+Strings(1,3)
			return Ret
		endif
		if B == 4 then
			set Ret =CO+Strings(1,4)
			return Ret
		endif
		if B == 5 then
			set Ret =CO+Strings(1,5)
			return Ret
		endif
		if B == 6 then
			set Ret =CO+Strings(1,6)
			return Ret
		endif
		if B == 7 then
			set Ret =CO+Strings(1,7)
			return Ret
		endif
		if B == 8 then
			set Ret =CO+Strings(1,8)
			return Ret
		endif
		if B == 9 then
			set Ret =CO+Strings(1,9)
			return Ret
		endif	
	
	// endcitys
	endif
	
	if A == 3 then // Names
		if B == 0 then
			set Ret ="Phohoos"
			return Ret
		endif
		if B == 1 then
			set Ret ="Issetia"
			return Ret
		endif
		if B == 2 then
			set Ret ="Paneos"
			return Ret
		endif
		if B == 3 then
			set Ret ="Dusios"
			return Ret
		endif
		if B == 4 then
			set Ret ="Eroitia"
			return Ret
		endif
		if B == 5 then
			set Ret ="Awaytia"
			return Ret
		endif
		if B == 6 then
			set Ret ="Ightios"
			return Ret
		endif
		if B == 7 then
			set Ret ="Aleeaos"
			return Ret
		endif
		if B == 8 then
			set Ret ="Omootia"
			return Ret
		endif
		if B == 9 then
			set Ret ="Fiwyos"
			return Ret
		endif
		
	endif
    if A == 4 then // Player Name
			set Ret =GetPlayerName(ConvertedPlayer(B))
			return Ret
	endif
	return Ret	
endfunction
 

Tom Jones

N/A
Reaction score
437
Jass is read from the top down. This means that a function calling a function below it self will cause a syntax error:
JASS:
function A takes nothing returns nothing
    call B() //This will cause a syntax error "Undeclared function" since the
               //function in question is below the function it self.
endfunction

function B takes nothing returns nothing
    call A() //This wont cause a syntax error, the function in question is above
               //the function it self.
endfunction
This means that you should make sure that your New_FM is above any calls to it that you may have.
 

Gwypaas

hook DoNothing MakeGUIUsersCrash
Reaction score
50
put it in a library
JASS:
library String
function Strings takes integer A,integer B returns string

                local string Ret
                local string CO
        if A == 0 then // Classes
                if B == 0 then
                        set Ret = "Basic Mage"
                        return Ret
                endif
                if B == 1 then
                        set Ret = "Fire Mage"
                        return Ret
                endif
                if B == 2 then
                        set Ret = "Water Mage"
                        return Ret
                endif           
                if B == 3 then
                        set Ret = "Time Mage"
                        return Ret
                endif
                if B == 4 then
                        set Ret = "Earth Mage"
                        return Ret
                endif           
                if B == 5 then
                        set Ret = "Wind Mage"
                        return Ret
                endif           
                if B == 6 then
                        set Ret = "AnitTime Mage"
                        return Ret
                endif           
        // endclasses
        endif 
        
        if A == 1 then // Places
                if B == 0 then
                        set Ret =  "Osusia"
                        return Ret
                endif
                if B == 1 then
                        set Ret = "Anicia"
                        return Ret
                endif
                if B == 2 then
                        set Ret = "Ardonia"
                        return Ret
                endif
                if B == 3 then
                        set Ret = "Ageocia"
                        return Ret
                endif
                if B == 4 then
                        set Ret ="Buralia"
                        return Ret
                endif
                if B == 5 then
                        set Ret ="Ildicia"
                        return Ret
                endif
                if B == 6 then
                        set Ret ="Arocia"
                        return Ret
                endif
                if B == 7 then
                        set Ret ="Warecia"
                        return Ret
                endif
                if B == 8 then
                        set Ret ="Morycia"
                        return Ret
                endif
                if B == 9 then
                        set Ret ="Estelia"
                        return Ret
                endif
                // endPlaces
        endif
        
        if A == 2 then // citys
                set CO = "Capital of "
                        if B == 0 then
                        set Ret =CO+Strings(1,0)
                        return Ret
                endif
                if B == 1 then
                        set Ret =CO+Strings(1,1)
                        return Ret
                endif
                if B == 2 then
                        set Ret =CO+Strings(1,2)
                        return Ret
                endif
                if B == 3 then
                        set Ret =CO+Strings(1,3)
                        return Ret
                endif
                if B == 4 then
                        set Ret =CO+Strings(1,4)
                        return Ret
                endif
                if B == 5 then
                        set Ret =CO+Strings(1,5)
                        return Ret
                endif
                if B == 6 then
                        set Ret =CO+Strings(1,6)
                        return Ret
                endif
                if B == 7 then
                        set Ret =CO+Strings(1,7)
                        return Ret
                endif
                if B == 8 then
                        set Ret =CO+Strings(1,8)
                        return Ret
                endif
                if B == 9 then
                        set Ret =CO+Strings(1,9)
                        return Ret
                endif   
        
        // endcitys
        endif
        
        if A == 3 then // Names
                if B == 0 then
                        set Ret ="Phohoos"
                        return Ret
                endif
                if B == 1 then
                        set Ret ="Issetia"
                        return Ret
                endif
                if B == 2 then
                        set Ret ="Paneos"
                        return Ret
                endif
                if B == 3 then
                        set Ret ="Dusios"
                        return Ret
                endif
                if B == 4 then
                        set Ret ="Eroitia"
                        return Ret
                endif
                if B == 5 then
                        set Ret ="Awaytia"
                        return Ret
                endif
                if B == 6 then
                        set Ret ="Ightios"
                        return Ret
                endif
                if B == 7 then
                        set Ret ="Aleeaos"
                        return Ret
                endif
                if B == 8 then
                        set Ret ="Omootia"
                        return Ret
                endif
                if B == 9 then
                        set Ret ="Fiwyos"
                        return Ret
                endif
                
        endif
    if A == 4 then // Player Name
                        set Ret =GetPlayerName(ConvertedPlayer(B))
                        return Ret
        endif
        return Ret      
endfunction
endlibrary
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
it says that New_FM is undeclared

If you call a function, the called function must be located above the function calling it.

For example:

JASS:
function A takes nothing returns nothing
    call B()
endfunction

function B takes nothing returns nothing
    return 
endfunction


Would result in an error that function B was undeclared. Instead, your functions should look like this:

JASS:
function B takes nothing returns nothing
    return 
endfunction

function A takes nothing returns nothing
    call B()
endfunction
 

Gwypaas

hook DoNothing MakeGUIUsersCrash
Reaction score
50
Good job copy and pasting Tom Jones post, maybe someone is rep whoring too much.


Anywys, you can also paste your code in the map header if you do not have newgen installed
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
Good job copy and pasting Tom Jones post, maybe someone is rep whoring too much.

Sorry, I had opened a bunch of tabs I was going to look at, got side-tracked and came back to it. I forgot it had been that long since I opened it.

I wrote it myself, but forgot to refresh it before posting. :eek:
 

Viikuna

No Marlo no game.
Reaction score
265
Please, dont PM these questions to me anymore. I check Jass forums every time I visit in this site, so sending PM is kinda useless.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top