Cześć :)
prosze się nie przeraźić ilością tekstu :)
Spotkałem się z problemem, którego nie potrafie rozwiązać... Ale od początku :) Za zadanie (Symfonia C++) miałem napisać program, który korzysta ze zmiennych globalnych, funkcji a ich deklaracje są zawartę w pliku nagłówkowym. Wiadomo w ćwiczeniu chodziło o poćwiczenie "łączenia" projektu i wykorzystanie tego.
Porównując mój kod z poprzednimi gdzię posiadałem nawet z 10 plików *.h, *.cpp i wszystko byłem w stanie bez problemu zespolić tak z tym mam problem. Wzoruję się nawet na książce i dokładnie w ten sam sposób dołączam nagłówek w analogicznej sytuacji i niestety pojawia mi się litania błędów:
Błędy: http://wklej.org/id/1804049/
Sprawdzałem kod kilka razy, porównywałem, googlowałem i nic. Na początku myślalem, że to wina tego, że główny plik nie nazywa się main.cpp ale niestety to też nie to... Do rzeczy, o to kod:
cw36Plik1.cpp
#include <iostream>
#include "cw36PlikN.h"
using namespace std;
/** Rozdział 5 - Funkcje. Ćwiczenie 36. Strona 168. **/
// Zmienne globalne
int plik1_Gint = 10;
double plik1_Gdouble = 30.33;
char plik1_Gchar = 'P';
int main()
{
wypisz(plik1_Gint, plik1_Gdouble, plik1_Gchar, 1);
wypisz(plik2_Gint, plik2_Gdouble, plik2_Gchar, 2);
zmiana_wartosci(plik1_Gint, plik1_Gdouble, plik1_Gchar);
zmiana_wartosci(plik2_Gint, plik2_Gdouble, plik2_Gchar);
wypisz(plik1_Gint, plik1_Gdouble, plik1_Gchar, 1);
wypisz(plik1_Gint, plik1_Gdouble, plik1_Gchar, 2);
}
cw36Plik2.cpp
#include <iostream>
#include "cw36PlikN.h"
using namespace std;
/** Rozdział 5 - Funkcje. Ćwiczenie 36. Strona 168. **/
// zmienne globalne
int plik2_Gint = 70;
double plik2_Gdouble = 20.58;
char plik2_Gchar = 'K';
void wypisz(int Gi, double Gd, char Gc, int plik)
{
cout << "*** Wypisuje dane pliku: " << plik << " ***"<< endl;
cout << "Zmienna int: " << Gi << endl;
cout << "Zmienna double: " << Gd << endl;
cout << "Zmienna char: " << Gc << endl;
}
void zmiana_wartosci (int &Gi, double &Gd, char &Gc)
{
cout << "Podaj nowa wartosc zmiennej Globalnej int: " << endl;
cin >> Gi;
cout << "Podaj nowa wartosc zmiennej Globalnej double: " << endl;
cin >> Gd;
cout << "Podaj nowa wartosc zmiennej Globalnej char: " << endl;
cin >> Gc;
}
oraz plik nagłówkowy cw36PlikN.h
#ifndef CW36PLIKN_H_INCLUDED
#define CW36PLIKN_H_INCLUDED
// deklaracje zmiennych globalnych
extern int plik1_Gint;
extern double plik1_Gdouble;
extern char plik1_Gchar;
extern int plik2_Gint;
extern double plik2_Gdouble;
extern char plik2_Gchar;
// deklaracje funkcji
void zmiana_wartosci (int &Gi, double &Gd, char &Gc); // deklaracja funkcji z argumentami na zmiane wartosci
void wypisz(int Gi, double Gd, char Gc, int plik); // deklaracja funkcji wypisującej zmienne
#endif // CW36PLIKN_H_INCLUDED
W programie nie ma za dużo komentarzy, bo wszystko wydaję się jasne. Głównie chodziło o poćwiczenie łączenia.
Może błąd występuję tylko u mnie? Bo naprawdę nie jestem w stanie dostrzeć o co chodzi... :) może troszkę się rozpisałem, ale chciałem też pokazać, że nie pobiegłem od razu na forum jak tylko wyskoczyły błędy tylko próbowałem sam rozwiązać problem, lecz nie dałem rady :)
Ps. Zapomniałem dodać, cały program działa gdy dodam w cw36Plik1.cpp, dyrektywę #include "cw36Plik2.h" "cw36Plik2.cpp", ale to chyba nie jest poprawne działanie i powinno działać z plikiem nagłówkowym