• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Kompilacja laczna - nie mozna skompilowac programu

Aruba Cloud - Virtual Private Server VPS
0 głosów
231 wizyt
pytanie zadane 31 marca 2019 w C i C++ przez mrKaczorrro13 Użytkownik (560 p.)
zamknięte 31 marca 2019 przez mrKaczorrro13

Witam!

Mam problem z kompilacja przykladowego programu z ksiazki "Jezyk C++ szkola programowania". Porownalem  caly kod z kodem z ksiazki i wydaje sie ze powinno byc wszystko wporzadku, jednak program sie nie kompiluje i wyswietla mi podany komunikat bledu:

collect2.exe: error: ld returned 1 exit status

Oto kod:

//external.cpp -- zmienne zewnetrzne
#include <iostream>
using namespace std;
//zmienna zewnetrzna:
double warming=0.3; //definicja zmiennej warming
//prototypy funkcji:
void update(double dt);
void local();

int main()          //korzysta ze zmiennej globalnej
{
    cout << "Globalne ocieplenie wynosi " <<warming<<" stopni.\n";
    update(0.1);
    cout << "Globalne ocieplenie wynosi " <<warming<<" stopni.\n";
    local();
    cout << "Globalne ocieplenie wynosi " <<warming<<" stopni.\n";
    return 0;
}
//support.cpp - stosowanie zmiennych zewnetrznych
#include <iostream>
extern double warming;    //deklaracja referancyjna zmiennej warming z innego pliku
//zmienna zewnetrzna:
double warming=0.3;         //definicja zmiennej warming
//prototypy funkcji:
//void update(double dt);
//void local();
using std::cout;

void update(double dt)      //modyfikuje zmienna globalna
{
    extern double warming;  //optymalne powtorzenie deklaracji
    warming+= dt;            //odwolanie do globalnej warming
    cout<<"Zwiekszam parametr ocieplenia do "<<warming;
    cout<<" stopni.\n";
}

void local()                //korzysta ze zmiennej lokalnej
{
    double warming=0.8;     //nowa zmienna przeslania zmienna zewnetrzna

    cout<<"Lokalne ocieplenie wynosi "<<warming<<" stopni.\n";
    //odwolanie do zmiennej globalnej za pomoca operatora zasiegu
    cout<<"Ale globalne ma wartosc "<<::warming;
    cout<<" stopni.\n";
}

Z gory wielkie dzieki za pomoc.

komentarz zamknięcia: Znaleziona odpowiedz
komentarz 31 marca 2019 przez mrKaczorrro13 Użytkownik (560 p.)
Zapomnialem dodac ze utworzylem nowy plik 9.6 support w folderze z "main" i polaczylem ze soba dwa pliki.

1 odpowiedź

0 głosów
odpowiedź 31 marca 2019 przez mrKaczorrro13 Użytkownik (560 p.)
Blad jest w podreczniku. Wedlug reguly jednokrotnej definicji, zmienna moze byc  definiowana tylko jeden raz. Jesli w kilku plikach wystepuje zmienna zewnetrzna, jej definicja moze pojawic sie tylko w jednym z tych plikow. Ale we wszystkich pozostalych plikach wymagana jest deklaracja tejze zmiennej ze slowen "extern". W podanym przykladzie jest ta sama  definicja w dwoch plikach.

double warming=0.3;

Jak to jest, ze zazwyczaj kiedy kogos zapytam o podpowiedz albo napisze na forum o problemu to 5 minut pozniej sam znajduje odpowiedz? :)

Podobne pytania

0 głosów
4 odpowiedzi 8,976 wizyt
pytanie zadane 18 października 2016 w C i C++ przez MarioMZ Nowicjusz (170 p.)
0 głosów
3 odpowiedzi 1,631 wizyt
0 głosów
2 odpowiedzi 425 wizyt

93,327 zapytań

142,325 odpowiedzi

322,396 komentarzy

62,657 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...