0

So I was originally writing my code in code blocks but when I'd try to compile it would always give me errors saying that it wasn't understanding the references i was making to functions in other files.At which point I starting using atom, but it's come to the point where I need to use he debugging tool in code blocks and I'm still getting the same errors even though my code compiles when I run it through gcc. Can someone help please?? These are the errors I'm getting.

||=== Build: Debug in A2 (compiler: GNU GCC Compiler) ===| obj\Debug\main.o||In function main':| main.c|18|undefined reference tocreateMyVector'| main.c|29|undefined reference to PathInit'| main.c|30|undefined reference toAllPathsRec'| main.c|31|undefined reference to `PathPrint'| ||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "vector.h"
#include "path.h"
#define BUFFERSIZE 20

int main()
{
Vector *leVector;

unsigned int size;
char leArray[BUFFERSIZE];

scanf("%u\n",&size);
fgets(leArray,sizeof(leArray),stdin);

leVector = createMyVector(size);

char *element = strtok(leArray, " ");

int i;
for(i=0;i<size;i++){
    *(leVector->item + i) = atoi(element);
    element = strtok(NULL," ");
}

Path Solution;
PathInit(&Solution,size);
AllPathsRec(0,leVector,&Solution);
PathPrint(&Solution);
return 0;
}

vector.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "vector.h"

void vectorRead(Vector * V){
printf("Size of the array is: %d\n",V->size);

int i;
for(i = 0; i < V->size; i++){
    if(i == V->size)
        printf("%d\n ",*(V->item+i));
    else
        printf("%d ",*(V->item+i));
}
}

Vector * createMyVector(int size){
Vector * vect = (Vector *)malloc(sizeof(Vector));
vect->size = size;
vect->item = (int *)malloc(sizeof(int)*size);
return vect;
}

path.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "vector.h"
#include "path.h"

void PathInit(Path *P, int vsize){
P->size = vsize;
P->item = (int *)malloc(sizeof(int)*vsize);
P->top = -1;
}

int AllPathsRec(int position, Vector *V, Path *Solution){
PathAddEntry(Solution,position);
position += *(V->item + position);

while(Solution->top != V->size -1){
  AllPathsRec(position, V, Solution);
}

return 0;
}

int PathAddEntry(Path *P, int entry){
if(P->top >= P->size - 1){
printf("ERROR: STACK OVERFLOW\n");
return 1;
}
P->top++;
*(P->item + P->top) = entry;
return 0;
}

int PathRemoveEntry(Path *P){
if(P->top <= -1){
  printf("\nERROR: NO ELEMENT TO REMOVE\n");
  return 1;
}
P->top--;
return 0;
}

void PathPrint(Path *P){
printf("Size of the Solution array is: %d\n",P->size);

int i;
for(i = 0;i <= P->top; i++){
    if(i == P->top)
        printf("%d\n ", *(P->item+i));
    else
        printf("%d ", *(P->item+i));
}

}

vector.h

#ifndef VECTOR_H
#define VECTOR_H

typedef struct {
int size;
int *item;
}Vector;

Vector * createMyVector(int size);
void vectorRead(Vector * V);
#endif

path.h

#ifndef PATH_H
#define PATH_H

typedef struct{
int size;
int top;
int *item;
}Path;

void PathInit(Path *P, int size);
int AllPathsRec(int position, Vector *V, Path *Solution);
int PathAddEntry(Path *P, int entry);
int PathRemoveEntry(Path *P);
void PathPrint(Path *P);

#endif
  • Write a `Makefile` (see [this](http://stackoverflow.com/a/21884681/841108) and many other examples....) and use `make` to compile your program. You might even setup your CodeBlock tool to use `make` – Basile Starynkevitch Oct 16 '15 at 05:15
  • Try to create new project. Maybe codeblocks is set up to use another gcc installation, or you simply need to rebuild the project, or there is something wrong with your project structure. – Nikolay K Oct 16 '15 at 06:57
  • @Andy, Are you compiling all three files vector.c path.c and main.c together? If you give the gcc compilation instruction that you used, it may help to understand the problem. Currently, it seems that you are only compiling main.c using gcc. – cm161 Oct 16 '15 at 07:19

0 Answers0