Podzial programu na pliki C++

0

Deklaracje funkcji read_vector i display_vector umieść w pliku nagłowkowym vector_utils.h, a ich definicje w pliku vector_utils.c.
Zrobilem to, jednak gdzies podwojnie zdefiniowana jest funkcja, czy moglby mi ktos powiedziec, gdzie jest blad? Z gory dziekuje

"
/usr/bin/ld.gold: error: vector_utils.o: multiple definition of 'read_vector'
/usr/bin/ld.gold: 21.08.o: previous definition here
/usr/bin/ld.gold: error: vector_utils.o: multiple definition of 'display_vector'
/usr/bin/ld.gold: 21.08.o: previous definition here
"

Main

#include <stdio.h>
#include <stdlib.h>
#include "vector_utils.h"
#include "vector_utils.c"


int main()
{
	int tab[100];
	int stop_value = -1;
	int size = 0;
	int rozmiar;
	
	rozmiar = read_vector(tab, size, stop_value);
	sort(tab, rozmiar);
	display_vector(tab, rozmiar);

   return 0;
} 

int sort(int* tab, int size)
{
	if(tab == NULL) return 0;
	int i, j, schowek = 0;
    
    for( j = 0; j < size; j++ ) 
	{
        for( i = 0; i < size; i++ )
    	{
            if( *( tab + i ) > *( tab + i + 1 ) && *(tab +i + 1 ) != -1)
           	{
                	schowek = *( tab + i );
                	*( tab + i ) = *( tab + i + 1 );
                	*( tab + i + 1 ) = schowek;
           	}
        }
    }
	return 1;
}

vector_utils.h

#ifndef vector_utils_h
#define vector_utils_h


int read_vector(int* tab, int size, int stop_value);
void display_vector(const int* tab, int size); 
int sort(int* tab, int size);

#endif

vector_utils.c

#include <stdio.h>
#include <stdlib.h>


int read_vector(int* tab, int size, int stop_value)
	{
		int i;
		size = 0;
		stop_value = -1;
		
		printf("Wpisuj wartosci calkowite: \n");
		for(i = 0; i < 100; i++)
		{
	 		scanf("%d",	&*(tab+i));
			size++; 		
	 		if(*(tab+i)==stop_value)
			{
	 			size--;
	 			break;
			}
	    }
	    return size;
	}
void display_vector(const int* tab, int size)
	{
		int i;
		for(i=0; i<size; i++)
		{
			printf("%d ", *(tab+i));	
		}		
	}

1
#include "vector_utils.c"

Nie inkluduje się plików implementacji. Tylko nagłówki

0

Ale wtedy program sie wywala, gdzies indziej to mam wrzucic?
undefined reference to read_vector(int*, int, int)' undefined reference to display_vector(int const*, int)'
[Error] ld returned 1 exit status

1

To nie program się wywala, a linker sygnalizuje błąd. Pokaż jak kompilujesz program. IDE? Jakiś build system?

0

w Devie C++ kompiluje, musze to wszystko do projektu dodac?

1

Tak, musisz poinformować kompilator/linker za pomocą pliku projektu, że ma go również zawrzeć w programie. Czyli dodaj do projektu. A na przyszłość porozglądaj się za sensowniejszym IDE.

0

kumam, dzieki bardzo, a polecasz cos spoko?

1

Jak jesteś studentem/uczniem i się łapiesz na darmowy program, to ponoć CLion jest bardzo fajny. Z innych ja bardzo lubię Qt Creatora, a nowe wersje Visual Studio też są niczego sobie. Wiele osób zaczyna od Code::Blocks, ale ciężko mi się na ten temat wypowiadać.

0

Spoko, dzieki zainstaluje cos i potem zupdatuje posta ze dziala. Dzieki jeszcze raz za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1