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

[C++] unresolved external symbol "void __cdecl funkcja_egipska(void)"

Ostatnio zmodyfikowano 2013-09-19 12:15
Autor Wiadomość
Dadits
Temat założony przez niniejszego użytkownika
[C++] unresolved external symbol "void __cdecl funkcja_egipska(void)"
» 2013-09-19 11:37:19
Witam,
zacząłem się interesować zagadnieniem pisania programów. Nabyłem książki Jerzy Grębosz "Symfonia C++ standard" - wydanie drugie. W książce pojawił się przykład programu podzielonego na kilka plików, chciałem zobaczyć jak to działa w kompilatorze (VS 2010), przepisałem całą treść kody, lecz niestety program nie chce się uruchomić, domyślam się, że jako iż jest to wydanie drugie a aktualne wydanie (o ile się nie mylę) to numer 3, więc zapewne występują jakieś nowości, ulepszenia, jednak bardzo mi należy na rozwikłaniu tego problemu. Poniżej zamieszczam krótkie kody z trzech plików:

Plik: afryka.cpp
C/C++
#include <iostream>
#include "nagl.h"
using namespace std;

int ile_murzynow = 9;

void funcka_egipska( void ) {
    cout << "Jestem w Kairze !-------- \n"
    << "Na swiecie jest " << ile_murzynow
    << " murzynow, oraz " << ile_europejczykow
    << " europejczykow \n";
}

void funkcja_kenijska() {
    cout << "Jestem w Nairobi ! --------\n"
    << "Na swiecie jest " << ile_murzynow
    << " murzynow, oraz " << ile_europejczykow
    << " europejczykow \n";
}

int main() {
    cout << "Poczatek programu\n";
    funkcja_francuska();
    funkcja_niemiecka();
    cout << "Koniec programu \n";
}

Plik: europa.cpp
C/C++
#include <iostream>
#include "nagl.h"

using namespace std;

int ile_europejczykow = 8;

void funkcja_francuska() {
    cout << "Jestem w Paryzu ! ********\n"
    << "Na swiecie jest " << ile_murzynow
    << " murzynow, oraz " << ile_europejczykow
    << " europejczykow \n";
   
    funkcja_egipska();
}

void funkcja_niemiecka( void ) {
    cout << "Jestem w Berlinie ! ********\n"
    << "Na swiecie jest " << ile_murzynow
    << " murzynow, oraz " << ile_europejczykow
    << " europejczykow \n";
    funkcja_kenijska();
}

Plik: nagl.h
C/C++
extern int ile_murzynow;
extern int ile_europejczykow;

void funkcja_egipska();
void funkcja_kenijska();
void funkcja_francuska();
void funkcja_niemiecka();

Problem:
1>------ Build started: Project: Symfonia, Configuration: Debug Win32 ------
1>Build started 19/09/2013 10:36:38.
1>InitializeBuildStatus:
1>  Touching "Debug\Symfonia.unsuccessfulbuild".
1>ClCompile:
1>  europa.cpp
1>  afryka.cpp
1>  Generating Code...
1>ManifestResourceCompile:
1>  All outputs are up-to-date.
1>europa.obj : error LNK2019: unresolved external symbol "void __cdecl funkcja_egipska(void)" (?funkcja_egipska@@YAXXZ) referenced in function "void __cdecl funkcja_francuska(void)" (?funkcja_francuska@@YAXXZ)
1>D:\Zawartosc E\Visual Studio 2010\Symfonia\Debug\Symfonia.exe : fatal error LNK1120: 1 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:02.53
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
P-92314
unimator
» 2013-09-19 11:55:41
Różnice między wydaniami nie są z tego co wiem jakieś kolosalne, a już na pewno nie takie, że dotyczą innego standardu.
To jest błąd, który trzeba rozwiązać:

europa.obj : error LNK2019: unresolved external symbol "void __cdecl funkcja_egipska(void)" (?funkcja_egipska@@YAXXZ) referenced in function "void __cdecl funkcja_francuska(void)" (?funkcja_francuska@@YAXXZ)
Nie masz definicji funkcji funkcja_egipska (tzn. zrobiłeś literówkę tam gdzie chciałeś ją zdefiniować czyli w pliku afryka.cpp).
P-92315
Dadits
Temat założony przez niniejszego użytkownika
» 2013-09-19 12:15:16
Faktycznie, była literówka. Dziwi mnie tylko, że nic nie zostało podkreślone, chociażby w pliku *.h podkreślenie "funkcja_egipska()" skoro jest to tylko deklaracja a nigdzie nie ma definicji. Taki tak wielkie dzięki za pomoc, wszystko działa.
P-92316
« 1 »
  Strona 1 z 1