Linker error w C++


(Radiszczew) #1

Hej

Nie wiem, dlaczego przy próbie kompilacji poniższego kodu w DEV C++ pojawia się nieznany mi komunikat o błędzie:

[Linker error] undefined reference to `WinMain@16'

include

int suma;

void zwiekszInny(int *a, int *b)

{

int suma;

{

*a +=100;

*b +=200;

}

int x=10, y=10;

zwiekszInny(&x, &y);

suma= x+y;

cout<<"Funkcja ta nie powoduje zmiany wartosci. Suma w dalszym stopniu wynosi"<

char s;

cin>>s;

}

Proszę o wyjaśnienie, gdzie leży pies pogrzebany :wink:


(Fiołek) #2

Kompilujesz jako aplikacje Windows a nie masz głównej funkcji(WinMain).

A co do tej funkcji, to ona nie ma prawa się powieść. Wywołujesz tą samą funkcje nieskończoną ilość razy(rekurencyjnie).


(Ryan) #3

Właśnie dlatego ma prawo się powiesić. :wink: Czy raczej powiesić aplikację. Skończy się miejsce na stosie i program rzuci wyjątkiem.


(Radiszczew) #4

Nie rozumiem, dlaczego ten kod niby kompiluje jako Windows App, skoro postępuję podobnie jak z innymi , które nie żądają funkcji WinMain?


(Fiołek) #5

Każda aplikacja wymaga funkcji głównej. W aplikacjach okienkowych pod Windows jest to "WinMain", a w aplikacjach konsolowych "main". Musisz ją zdefiniować żeby aplikacja działała, a w tym kodzie jej nie ma.


(Radiszczew) #6

Może podpowiesz mi gdzie trzeba umieścić main, bo próbowałem tego sposobu wcześniej zawsze z błędem.


(Ryan) #7
  1. używaj tagu [code] do wklejania tekstu.

  2. Przykładowy sensowny program może wyglądać tak:

    include

    void zwiekszInny(int *a, int *b)

    {

    *a +=100;

    *b +=200;

    }

    int main(int argc, char *argv[])

    {

    int x=10, y=10;

    int suma;

    char s;

    suma = x+y;

    cout<<"Suma przed wynosi "<

    zwiekszInny(&x, &y);

    suma = x+y;

    cout<<"Suma po wynosi "<

    cin>>s;

    }

Jeśli faktycznie chcesz, by wartości się nie zmieniały:

#include


void zwiekszInny(int a, int b)

{

  a +=100;

  b +=200;

}


int main(int argc, char *argv[])

{

  int x=10, y=10;

  int suma;

  char s; 


  suma = x+y;

  cout<<"Suma przed wynosi "<

  zwiekszInny(x, y);

  suma = x+y;

  cout<<"Suma po wynosi "<

  cin>>s; 

}

@Fiołek: nie wiem jak DevCpp, ale wydaje mi się, że VS "łyka" w aplikacji Win32 dowolny entry point (main, wmain, WinMain, itp.).


(Radiszczew) #8

Dev C++ jest naprawdę złośliwy. W drugim kodzie znalazł znów błędy. Poza tym nie wiem, o co chodzi z

int argc, char *argv[]

Mimo wszystko dzięki, ze starałeś się pomóc


(Ryan) #9

A bardziej konkretnie?

int argc, char *argv[]

Aplikację możesz uruchomić z linii komend np. tak: program.exe jakisparametr blablabla argc to argument count - ilość parametrów w linii poleceń (parametry oddziela spacja). W powyższym wypadku są 3: program.exe - parametr 0 jakisparametr - parametr 1 blablabla - parametr 2 argv to tablica ciągów zawierająca poszczególne parametry. Jeśli to Cię przeraża, użyj:

void main(void)

i też powinno działać.


(Ludr) #10

Możesz także zwiększać argumenty poprzez referencję.

# include 

# include 

using namespace std;


void zwiekszInny(int &a, int &b) 

{ 

  a +=100; 

  b +=200; 

} 


int main()

{ 

  int x=10, y=10; 

  int suma; 

  char s; 


  suma = x+y; 

  cout<<"Suma przed wynosi "<

  zwiekszInny(x, y); 

  suma = x+y; 

  cout<<"\nSuma po wynosi "<

  getch();

 return 0;

}

uruchom cmd

wywołaj program z parametrami:

plik.exe paramX paramY paramZ


//plik.exe

# include 

# include 

using namespace std;


int main(int argc, char *argv[]) 

{ 

  int i=0;

    cout<<"Ilosc argumentow "<
        while (i<=argc) cout<<"\n"<

getch();

return 0;

}

(Grzegorz Ch) #11

harding hmm myślę, że taka pomoc w programowaniu, gdy ty nie masz najmniejszego pojęcia o języku C nie ma najmniejszego sensu.

zapoznaj się najpierw z jakąś dowolną literaturą traktującą o programowaniu w C lub kursem w internecie (masę tego jest).

Później jak już będziesz miał jakąś podstawową wiedzę o programowaniu w tym języku możesz pytać o rzeczy, których nie rozumiesz, lub z którymi masz problemy.

moja propozycja nie jest absolutnie złośliwa, tylko aby rozmawiać na dany temat, trzeba mieć chociaż odrobinę wiedzy.


(Radiszczew) #12

Przyznaję, że dopiero uczę się, a przecież kto pyta nie błądzi. Dziękuję za każdą rzetelną pomoc, także Grzegorza.


(Grzegorz Ch) #13

poczytaj:

  1. C++, pierwsze starcie

  2. tu dalsza część.


(Ryan) #14

Zwróć uwagę na tekst w oryginalnym pliku:

Chyba chodziło mu o przekazywanie przez wartość (tyle że nie specjalnie wyszło).