unresolved externals. Problem z plikiem nagłówkowym.

0

Witam!
Używam programu Visual Studio 2017.
Podążając za treścią książki natrafiłem na polecenie które każe utworzyć trzy pliki (2 o rozszerzeniu .cpp i jeden .h). W nagłówku zawarte są deklaracje:

extern int foo;
void print_foo();
void print(int);

Następnie w pliku źródłowym nazwanym "my_cpp" zawiera definicje funkcji:

#include "pch.h"
#include "my.h"
#include <iostream>

void print_foo()
{
	std::cout << '\n' << foo;
}

void print(int i)
{
	std::cout << '\n' << i;
}

Natomiast drugi plik o rozszerzeniu .cpp (use_cpp)zawiera definicję funkcji main oraz inicjacje wartości:

#include "pch.h"
#include "my.h"
#include <iostream>

int main()
{
	foo = 7;
	print_foo();
	print(99);
}

Z pozoru proste zadanie sprawia mi trudności ze względu na błąd przy próbie kompilacji, ponieważ otrzymuję błędy:
*
LNK2001 unresolved external symbol "int foo" (?foo@@3HA) use_cpp
LNK2001 unresolved external symbol "int foo" (?foo@@3HA) my_cpp
LNK1120 1 unresolved externals
*
Z tego co udało mi się wyczytać LNK2001 dotyczy braku definicji, ale jednak jest ona zawarta w funkcji main, więc nie wiem co dalej zrobić.

2

Nie masz nigdzie pliku cpp z definicją tej zmiennej (masz tylko deklarację, że gdzieś ta zmienna będzie zdefiniowana). To nie jest problem nagłówków.
W każdym razie to zadanie jest złe, bo uczy używania zmiennych globalnych, co jest jedną z najgorszych możliwych praktyk programowania.

W main nie masz definicji tylko użycie tej zmienne i przypisanie jej wartości.

0

hmm... racja. Mimo, że rozumiem problem nie mam pomysłu jak mógłbym go rozwiązać. Definicja w pliku nagłówkowym doprowadzi do wielokrotnej definicji, a gdy dodaję typ "int" do zmiennej w pętli main błąd LNK2001 znika tylko dla pliku "use.cpp", czyli tego z main'em. Byłbym wdzięczny za jakiekolwiek rady. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1