undefined reference to `recursiveFunction'

This is a discussion on undefined reference to `recursiveFunction' within the C Programming forums, part of the General Programming Boards category; THis is a long peice of code. I colored the important parts in red. I get the error: undefined reference ...

  1. #1
    Registered User
    Join Date
    Mar 2009
    Posts
    10

    undefined reference to `recursiveFunction'

    THis is a long peice of code.
    I colored the important parts in red.

    I get the error: undefined reference to `recursiveFunction'

    Please don't try to understand what that code does because I am not sure it will work correctly once it is error free.

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <errno.h>
    #include <sys/types.h>
    
    
    
    
    void recursiveFunction(int position, int nodesTrav[20],int cost,int complete);
    
    
    
    
    
    int main(int argc, char *argv[])
    {
    //5
    int arrayGraph[3][40];//one value for one node the other for the other node that are connected and the third value for the weight.
    int arrayPath[40][40];// Path taken. The array is shared between the threads. When one is writing is array no other threads must be able to access it.
    int complete[40];//if path complete it's value will be 0 else it's -1			
    int N; //number of nodes.
    int T;
    char file[30];
    int arrayCost[20];
    int nodesTraversedd[20];
    
    
    FILE *input;
    
    
    
    if(argc > 2)
    {
    	
    	T = atoi(argv[1]);
    	if((input = fopen( argv[2], "r")  ) == NULL)
    		printf("Could Not open file\n");
    
    	printf("T: %d and file: %s\n",T,argv[2]);
    
    
    }//end of if(argc > 2)
    
    
    
    
    
    else
    {
    	while(1)
    	{
    		printf("Please enter the number of threads to be created: ");
    		if(scanf("%d", &T) == 1)
    			{
    			    printf("Please enter the name of the file: ");
    			    	if(scanf("%s", &file) == 1)
    					{
    						if(T>-1)
    						{
    						  printf("OMAX\n");
    						  if((  input = fopen( file, "r")  ) != NULL)
    							break;
    						}//end of if(T>-1)
    					}//if(scanf("%s", &file) == 1)
    			}//end of if(scanf("%d", &T) == 1)
    			else
    			T = -2;
    		
    						
    	}//end of while(true)
    }//end else
    
    
    
    int i = 0;
    int u = 0;
    	for(i = 0;i< 40;i++)
    	{
    		for(u = 0;u< 40;u++)
    		{
    		   arrayPath[i][u] = -1;
    		}//end of for(u = 0;u< 20;u++)
    
    		arrayGraph[0][i] = -1;
    		arrayGraph[1][i] = -1;
    		arrayGraph[2][i] = -1;
    	        
    		complete[i] = -1;
    	
    	}//end of for(i = 0;i< 20;i++)
    
    
    for(i = 0;i< 20;i++)
    	{
    		arrayCost[i] = -1;
    		nodesTraversedd[i] = -1;
    	}
    
    
    
    
    
    
    
    
             int z;
    	 int s;
    	 int r = 0;
    	 char getchar;
    	 char str[2];
    	 int modulo;
             int mod = 0; 
    	 int count1 = 0;
    	 int count2 = 1;
    	 int count3 = 0;
             int countA = 0;
        
    	 for(z = 0; z < 1000; z++){
    	 getchar = getc( input );
    		
    		if(getchar == '0' ||getchar == '1' ||getchar == '2' ||getchar == '3' ||getchar == '4' ||getchar == '5' ||getchar == '6' ||
    			getchar == '7' ||getchar == '8' ||getchar == '9'){
    		
    
    			//printf("%c ",getchar);
    			str[0] = getchar;
    		        str[1] = '\0';
    		        s = atoi(str);			
    
    			if(r==0)
    			{
    				N=s;
    				mod = s;
    				r++;
    				
    			}	
    			else{
    			
    			//printf("Donkey\n");
    	
    			arrayGraph[2][countA] = s;//insert the weight in the array.
    			arrayGraph[0][countA] = count1;//insert the row number.
    			arrayGraph[1][countA++] = count2++;//insert the row number.
     
    		
    			if((count2 % mod ) == 0)
    			  {	
    				//mod--;
    				count3++;
    				count1 = count3;
    				count2 = count3 +1;
    				//printf("OMAZZZ\n");
    	
    				}
    			//printf("mod: %d count1: %d\n",mod,count1);
    			}//end of else
    
    
    
    
    
    
    
    			//printf("%d ",s);	
    			}//end of if(getchar == '0' ||getchar == '1' ||getchar == '2' ||getchar == '3'...
                           
    		}// end of for(z = 0; z < 1000; z++){
    
    int t = 0;
    while(1)
    {
    if(arrayGraph[0][t] == -1)
    break;
    printf("%d %d %d\n",arrayGraph[0][t],arrayGraph[1][t],arrayGraph[2][t]);
     t++;
    }
    		
    
    
    
    
    //printf("int: %d string: %s\n",argc,argv[2]);
    
    
    //printf("int: %d",i);
    
    // read from the file and store values into arrayGraph[3][20]
    
    
    /* 
    
    
    int NodePosition = 0;
    int NodesTraversed[40];
    int cost = 0;
    */
    int completeB = 0;
    
    
    int countCost = 0;
    int startingNode = 0;
    int nbofEdges = ((N*N - N)/2);
    
    
    
    recursiveFunction(0, nodesTraversedd,0,0);
    
    
    void recursiveFunction(int position, int nodesTrav[20],int cost,int complete)
    {
    int nodesTraversed[20];
    
    int i;
    for ( i = 0; i<20; i++)
      {
        
          nodesTraversed[i] = nodesTrav[i];
        
      }
    
    
    
    
    int arrayAdj[20][2];
    int countAdj = 0;
    	int h;    
    	for(h = 0; h < 20;h++)
    		arrayAdj[h][0] = -1;
        
    	if(complete == N && position ==startingNode)
    	{
    	   arrayCost[countCost] = cost;
    		countCost++;
    
    	}//end of if(complete == N)
    
    	
    	else // recursion
    	{	
    		//--------------------------------------
    		//Adjacent nodes
    		int q;
    		for(q = 0;q < nbofEdges;q++)
    		{
    			if(arrayGraph[0][q] == position ){
    			   arrayAdj[countAdj][0]=arrayGraph[1][q];
    			   arrayAdj[countAdj][1]=arrayGraph[2][q];
    			   countAdj++;			
    			}//end of if(arrayGraph[0][q] == position ){		    
    		}//end of for(q = 0;q < nbofEdges;q++)
    
    		for(q = 0;q < nbofEdges;q++)
    		{
    			if(arrayGraph[1][q] == position ){
    			   arrayAdj[countAdj][0]= arrayGraph[0][q];
    			   arrayAdj[countAdj][1]= arrayGraph[2][q];			   
    				countAdj++;			
    			}//end of if(arrayGraph[1][q] == position ){		    
    		}//end of for(q = 0;q < nbofEdges;q++)	 	
    		
    	
    
    		//----------------------------------------
    		//Traversed?
    		q = 0;	
    		h = 0;
    		while(arrayAdj[q][0] != -1)
    		{
    
    			while(nodesTraversed[h] != -1){
    				if(nodesTraversed[h] == arrayAdj[q][0])
    				{
    					arrayAdj[q][0] =  -2; 
    				} //end of if(nodesTraversed[h] == arrayAdj[q])
    				
    				h++;
    
    
    			}//end of while(nodesTraversed[h] != -1)
    			q++;
    		}//end of while(arrayAdj[q] != -1)
    
    
    
    
    
    		//---------------------------------------
    		//recursion
    
    
    		while(arrayAdj[q][0] >-1 )
    			
    		{
    			if(arrayAdj[q][0] == 0 && complete == (N-2))
    			{
    				//complete++;
    				//cost = cost + arrayAdj[q][1];
    				//RECURSION	
    				recursiveFunction(arrayAdj[q][0], nodesTraversed, cost + arrayAdj[q][1], complete + 1);	
    			}//end of if((arrayAdj[q] == 0 && complete == (N-1))
    		
    			if(arrayAdj[q][0] > 0)
    			{
    				complete++;
    				recursiveFunction(arrayAdj[q][0], nodesTraversed, cost + arrayAdj[q][1], complete + 1);
    				//cost = cost + arrayAdj[q][1];
    				//RECURSION
    
    			} //end of if((arrayAdj[q] > 0)
    			
    
    
    		}//end of while(arrayAdj[q] >-1 )
    
    
    
    
    	}//end of else // recursion
    	
    
    }//end of recursion
    
    }//end of main

  2. #2
    Registered User
    Join Date
    Mar 2009
    Posts
    10
    more concise code.


    Code:
    #include <stdio.h>
    
    
    void recursiveFunction(int position, int nodesTrav[20],int cost,int complete);
    
    
    int main(int argc, char *argv[])
    {
    int i = 0;
    int nodesTraversed[20];
    recursiveFunction(0, nodesTraversed,0,0);
    
    
    
    void recursiveFunction(int position, int nodesTrav[20],int cost,int complete)
    
    {
    	if(i == 1)
    {
    	i++;
    	recursiveFunction(0, nodesTraversed, 0, 0);	
    }					
    		
    	}//end of else // recursion
    	
    }//end of main

  3. #3
    Registered User
    Join Date
    Mar 2009
    Posts
    10
    I got it.

    I have to put the recursiveFCT outside of main.
    I keep forgetting simple stuff.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Getting an error with OpenGL: collect2: ld returned 1 exit status
    By Lorgon Jortle in forum C++ Programming
    Replies: 6
    Last Post: 05-08-2009, 08:18 PM
  2. Undefined Reference Compiling Error
    By AlakaAlaki in forum C++ Programming
    Replies: 1
    Last Post: 06-27-2008, 11:45 AM
  3. Screwy Linker Error - VC2005
    By Tonto in forum C++ Programming
    Replies: 5
    Last Post: 06-19-2007, 02:39 PM
  4. C OpenGL Compiler Error?
    By Matt3000 in forum C Programming
    Replies: 12
    Last Post: 07-07-2006, 04:42 PM
  5. c++ linking problem for x11
    By kron in forum Linux Programming
    Replies: 1
    Last Post: 11-19-2004, 09:18 AM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21