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 ==========
Fiolek
(Fiołek)
7 Sierpień 2012 22:36
#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 .
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 ==========
PolishCJ
(Polish Cj)
7 Sierpień 2012 23:12
#4
stdafx.cpp ?
Upewnij się, że przy tworzeniu projektu zaznaczasz opcję “Empty project”, to chyba dobre rozwiązanie przy tak prostych programach.
Miałem pusty projekt.
– Dodane 08.08.2012 (Śr) 9:40 –
Pod DEVem ten program działa…
Rolek0
(Rolek0)
8 Sierpień 2012 11:56
#6
Pusty czy wyczyszczony?
I czy na pewno Source.cpp był dołączony do projektu?
Działający projekt: http://speedy.sh/mjeVk/ex.rar
PS Na początek nauki polecałbym jakieś prostsze IDE, np. Code::Blocks
Fiolek
(Fiołek)
8 Sierpień 2012 13:13
#7
PolishCJ:
stdafx.cpp
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.
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.