Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program nie działa po rozdzieleniu funkcji do osobnych plików .cpp

Ostatnio zmodyfikowano 2013-06-13 00:59
Autor Wiadomość
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

C/C++
#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)
C/C++
#ifndef FUNKCJE_H_INCLUDED
#define FUNKCJE_H_INCLUDED


double funkcja1( vector & tablica1 );
double funkcja2( double srednia, int rozmiar );

#endif // FUNKCJE_H_INCLUDED

Pierwszy plik .cpp (funkcja1.cpp) 

C/C++
#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)

C/C++
#include "funkcje.h"

double funkcja2( double srednia, int rozmiar )
{
    srednia /= rozmiar;
   
    return srednia;
}

I plik main.cpp

C/C++
#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



P-85443
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.
P-85446
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?
P-85449
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.
P-85459
pekfos
» 2013-06-12 22:20:22
Pokaż plik funkcja1.cpp.
P-85460
xar-man
Temat założony przez niniejszego użytkownika
funkcja1.cpp
» 2013-06-12 22:23:17
C/C++
#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;
}
P-85461
unimator
» 2013-06-13 00:24:38
Do funkcje.h dopisz to (na początku), z reszty plików powywalaj:
C/C++
#include <vector>
Poza plikiem z funkcją main zamień wszystkie vector na std::vector (chyba, że też dasz using namespace std).
P-85468
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
P-85470
« 1 »
  Strona 1 z 1