C++ polecenie extern


(Kot w Półbutach) #1

Właśnie uczę się o poleceniu 'extern'. Czy ktoś może doradzić, dlaczego taki program nie działa? (kompilator MV C++ 2010 express)

eksperymenty.cpp

include "StdAfx.h"

include

using namespace std;

double x1 = 11;

extern double x2;

void func();

int main()

{

cout << "main: x1 = " << x1 << endl;

cout << "main: x2 = " << x2 << endl;

func();

}

Source.cpp

include "StdAfx.h"

include

using namespace std;

extern double x1;

double x2 = 22;

void func()

{

cout << "func: x1 = " << x1 << endl;

cout << "func: x2 = " << x2 << endl;

}

Jedyne, co się wyświetla w pasku na dole (BTW jak się nazywa ten pasek?):

1>------ Build started: Project: eksperymenty, Configuration: Debug Win32 ------

1>eksperymenty.obj : error LNK2019: unresolved external symbol "void __cdecl func(void)" (?func@@YAXXZ) referenced in function _main

1>eksperymenty.obj : error LNK2001: unresolved external symbol "double x2" (?x2@@3NA)

1>C:\Users\Valued Customer\documents\visual studio 2010\Projects\eksperymenty\Debug\eksperymenty.exe : fatal error LNK1120: 2 unresolved externals

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


(Fiołek) #2

Obstawiam, że jednak nie dodałeś Source.cpp do projektu i nie jest kompilowany razem z całym projektem, a jeśli jest, to spróbuj skompilować wszystko od nowa(w sensie rebuild solution).

Ten pasek to jeden z kilku docków, do którego można przypinać okna, a ten tekst pochodzi z okna Output.


(Kot w Półbutach) #3

Podczas rebuildowania wyświetla się komunikat:

1> stdafx.cpp

1> eksperymenty.cpp

1>eksperymenty.obj : error LNK2019: unresolved external symbol "void __cdecl func(void)" (?func@@YAXXZ) referenced in function _main

1>eksperymenty.obj : error LNK2001: unresolved external symbol "double x2" (?x2@@3NA)

1>C:\Users\Valued Customer\documents\visual studio 2010\Projects\eksperymenty\Debug\eksperymenty.exe : fatal error LNK1120: 2 unresolved externals

========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========


(Polish Cj) #4

stdafx.cpp ?

Upewnij się, że przy tworzeniu projektu zaznaczasz opcję "Empty project", to chyba dobre rozwiązanie przy tak prostych programach.


(Kot w Półbutach) #5

Miałem pusty projekt.

-- Dodane 08.08.2012 (Śr) 9:40 --

Pod DEVem ten program działa..


(Rolek0) #6

Pusty czy wyczyszczony?

I czy na pewno Source.cpp był dołączony do projektu? :wink:

Działający projekt: http://speedy.sh/mjeVk/ex.rar

PS Na początek nauki polecałbym jakieś prostsze IDE, np. Code::Blocks :slight_smile:


(Fiołek) #7

Precompiled Headers... Nie są niezbędne ale i bardzo nie przeszkadzają.

Nie wiem, czemu utarło się, że VC++ jest takie trudne... No i IDE ma naprawdę nikłe znaczenie w trakcie nauki.

@topic: dodaj OBA pliki do projektu, linker musi je linkować RAZEM, żeby znać wszystkie symbole.


(Kot w Półbutach) #8

Dzięki Panowie za pomoc, zwłaszcza Tobie Rolek0 za wysłanie kodu. Dzięki jego analizie wiem już o co chodziło, po prostu mój projekt był na konsolę win32..

-- Dodane 08.08.2012 (Śr) 23:46 --

..tylko, że teraz kompilator nie tworzy mi pliku .exe w katalogu debug. Klikam Build Solution i jest sukces, ale potem przy próbie uruchomienia F5 pisze, że nie może znaleźć odpowiedniego pliku. Co pominąłem?

-- Dodane 09.08.2012 (Cz) 0:16 --

Doooobra, już wszystko wiem... :lol: Pozdro.