[C++] Kompilacja programu składającego się z kilku plików

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

[C++] Kompilacja programu składającego się z kilku plików

Post autor: Luminofor » 17 mar 2009, 15:56

Witam, mam program składający się z 3 plików:

p021.cpp

Kod: Zaznacz cały

#include <iostream>
#include "nagl.h"
#include "p021a.cpp"

using namespace std;


int main()
{
	cout << "Podaj a: ";
	cin >> a;
	cout << "Podaj b: ";
	cin >> b;
	cout << endl << wieksza(a,b) << endl;
	druga();
	
}
inline int wieksza(int a, int b)
{ 
	if(a>b)
	{
		return a;
	}
	else
	{
		return b;
	}

} 
p021a.cpp

Kod: Zaznacz cały

#include <iostream>
using namespace std;
#include "nagl.h"

void druga(void)
{
	while(i>0)
	{
	cout << wieksza(a,b);
	i--;
	}
}
nagl.h

Kod: Zaznacz cały

extern int a,b;
int i=10;
inline int wieksza(int, int);
void druga(void);
Kompilator (VC++ 2008 EE SP1) przy kompilacji wyrzuca błąd:
1>(...)\nagl.h(2) : error C2374: 'i' : redefinition; multiple initialization
1> (...)\nagl.h(2) : see declaration of 'i'
Co jest źle i jak to naprawić?
Jest to ćwiczenie XXIX/rozdział 5 z nowej Symfonii

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 17 mar 2009, 16:00

Uzyj struktury:
#ifndef NAZWA_PLIKU
#define NAZWA_PLIKU

// tutaj caly kod...

#endif
Moze pomoce...

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 17 mar 2009, 16:02

Nie rozumiem. Jestem dopiero na końcu 5 rozdziału i nie rozumiem twojego kodu. Da to się zrobić prościej? Myślałem o przestrzeniach nazw w pliku nagłówkowym...

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 17 mar 2009, 16:54

Kompilator zglasza Ci, ze zadeklarowales przynajmniej dwukrotnie ta sama zmienna. Czasami wynika to z faktu, ze jeden plik jest uzywany kilka razy.
Podany blok kodu oznacza ni mniej ni wiecej, ze jezeli nie jest zdefiniowana stala NAZWA_PLIKU, to nalezy ja zdefiniowac i przy okazji wykonac znajdujacy sie tam kod. Gdy jest juz zdefiniowana, to plik nie jest kompilowany drugi raz.
Tu masz przykladowy kod w C++, co prawda na uK, ale zasada podobna. Przyjrzyj sie jak to jest tam zrobione i sprobuj powielic.
http://edw.com.pl/ftp_05/200903avt2893.zip
(szczegolnie pliki w katalogu SRC, w pliku main te dyrektywy nie musza wystepowac)

Quentin
Użytkownik
Posty: 140
Rejestracja: 01 maja 2008, 14:28
Lokalizacja: Unknown

Post autor: Quentin » 18 mar 2009, 17:30

Luminofor - po co kopiujesz ten sam temat na 5 różnych for :!: :?:

:arrow: http://pecetforum.info/forum/viewtopic.php?t=1373
:arrow: http://forum.dobreprogramy.pl/viewtopic ... 3&t=318574
:arrow: http://forum.ep.com.pl/viewtopic.php?p=85911
:arrow: http://www.elektroda.pl/rtvforum/topic1259760.html

:neutral:

EDIT:

A co do tego co nie rozumiesz - to się nazywa strażnik nagłówka i będzie o tym w 6 rozdziale...

Awatar użytkownika
Luminofor
Użytkownik
Posty: 1373
Rejestracja: 27 lis 2007, 17:17
Lokalizacja: Polska

Post autor: Luminofor » 18 mar 2009, 18:10

Quentin, żeby tylko na 5 ;p
Po co? Żeby dostać szybciej odpowiedź i więcej odpowiedzi i porównać je.

ODPOWIEDZ