xar-man Temat założony przez niniejszego użytkownika |
Program nie działa po rozdzieleniu funkcji do osobnych plików .cpp » 2013-06-12 21:21:01 Proszę o nakierowanie mnie w którym miejscu są błędy. Podaje program który działa bez problemów, tylko jest on w jednym pliku: main.cpp #include <iostream> #include <vector>
using namespace std;
double funkcja1( vector < double >& tablica1 ) { double rozmiar, srednia( 0 ); rozmiar = tablica1.size(); for( int i( 0 ); i < rozmiar; i++ ) { srednia += tablica1[ i ]; } return srednia; }
double funkcja2( double srednia, int rozmiar ) { srednia /= rozmiar; return srednia; }
int main() { double srednia, rozmiar; vector < double > tablica1( 3 ); tablica1[ 0 ] = 50; tablica1[ 1 ] = 21; tablica1[ 2 ] = 2; srednia = funkcja1( tablica1 ); rozmiar = tablica1.size(); cout << "Suma: " << srednia << endl << endl; srednia = funkcja2( srednia, rozmiar ); cout << "Srednia: " << srednia << endl << endl; return 0; }
Ponieważ, jestem początkujący chciałbym programować od początku dobrze i nabyć odpowiednie nawyki, dlatego postanowiłem rozdzielić program na części. Przepraszam, że nie mówię co program robi, po prostu zaczynam myślę jednak że się domyślicie (nie jest trudny). I tak oto: Plik .h (funkcje.h) #ifndef FUNKCJE_H_INCLUDED #define FUNKCJE_H_INCLUDED
double funkcja1( vector & tablica1 ); double funkcja2( double srednia, int rozmiar );
#endif
Pierwszy plik .cpp (funkcja1.cpp) #include "funkcje.h"
double funkcja1( vector & tablica1 ) { double rozmiar, srednia( 0 ); rozmiar = tablica1.size(); for( int i( 0 ); i < rozmiar; i++ ) { srednia += tablica1[ i ]; } return srednia; }
Drugi plik .cpp (funkcja2.cpp) #include "funkcje.h"
double funkcja2( double srednia, int rozmiar ) { srednia /= rozmiar; return srednia; }
I plik main.cpp #include <iostream> #include <vector> #include "funkcje.h"
using namespace std;
int main() { double srednia, rozmiar; vector < double > tablica1( 3 ); tablica1[ 0 ] = 580; tablica1[ 1 ] = 21; tablica1[ 2 ] = 2; srednia = funkcja1( tablica1 ); rozmiar = tablica1.size(); cout << "Suma: " << srednia << endl << endl; srednia = funkcja2( srednia, rozmiar ); cout << "Srednia: " << srednia << endl << endl; return 0; }
Na koniec podaje logi z kompilatora, używam programu Code::Blocks 12.11
funkcje.h:7:17: error: 'vector' was not declared in this scope funkcje.h:7:25: error: 'tablica1' was not declared in this scope funkcja1.cpp:3:17: error: redefinition of 'double funkcja1'
funkcje.h:7:8: error: 'double funkcja1' previously defined here funkcja1.cpp:3:17: error: 'vector' was not declared in this scope funkcja1.cpp:3:25: error: 'tablica1' was not declared in this scope
|
|
MrPoxipol |
» 2013-06-12 21:46:43 <<>> Może masz w złych katalogach pliki? Jeśli dodawałeś pliki przez generator w c::b to nagłówki lecą do include/, a źródło do src/. Ale chyba tak jak pekfos mówi. @down Mój błąd. |
|
pekfos |
» 2013-06-12 21:54:11 Brakuje #include <vector> w funkcje.h i musisz w deklaracjach i definicjach funkcji określić typ elementów vectora. Nazwa pliku .cpp musi być taka sama jak pliku .h. |
Od kiedy? |
|
xar-man Temat założony przez niniejszego użytkownika |
Nadal nie działa. » 2013-06-12 22:18:41 Jednak po wskazówkach pekfos-a:
funkcje.h:8:25: error: expected primary-expression before 'double' funkcja1.cpp:3:17: error: redefinition of 'double funkcja1
funkcje.h:8:8: error: 'double funkcja1' previously defined here funkcja1.cpp:3:17: error: 'vector' was not declared in this scope
funkcja1.cpp:3:25: error: expected primary-expression before 'double'
funkcja1.cpp:3:25: error: expected primary-expression before 'double'
funkcje.h:8:17: note: suggested alternative:
'std::vector'
Odnośnie plików: to są one wszystkie w jednym katalogu. Ale to jednak nie o to chodzi bo funkcja2 działa. |
|
pekfos |
» 2013-06-12 22:20:22 Pokaż plik funkcja1.cpp. |
|
xar-man Temat założony przez niniejszego użytkownika |
funkcja1.cpp » 2013-06-12 22:23:17 #include "funkcje.h" #include <vector>
double funkcja1( vector < double > & tablica1 ) { double rozmiar, srednia( 0 ); rozmiar = tablica1.size(); for( int i( 0 ); i < rozmiar; i++ ) { srednia += tablica1[ i ]; } return srednia; }
|
|
unimator |
» 2013-06-13 00:24:38 Do funkcje.h dopisz to (na początku), z reszty plików powywalaj: Poza plikiem z funkcją main zamień wszystkie vector na std::vector (chyba, że też dasz using namespace std). |
|
xar-man Temat założony przez niniejszego użytkownika |
Działa! Super! Dzięki! » 2013-06-13 00:59:20 unimator dzięki, wszystko działa, zamykam temat |
|
« 1 » |