Skocz do zawartości

Pomocy (z nagłówkami)?


deyvin12008

Rekomendowane odpowiedzi

Hej!

Ostatnio zacząłem interesować się c++, od razu uprzedzam, że jestem laikiem.

Mam taki oto kod

GML
#include <iostream>

#include <conio.h>

#include <string>

#include <math.h>

 

float main()

{

double float a;

a=2.123456789;

getch();

}

i dostaję taki oto komunikat od kochanego visual'a:

Błąd 1 error C2632: wystąpienie "double" przed "float" jest niedozwolone c:\users\admin\documents\visual studio 2012\projects\first\first\main.cpp 8 1 first

 

Myślę, że brakuje mi jakichś nagłówków??

Proszę o pomoc w problemie.

 

P.S. Czemu przy wpisywaniu getch(); kompilator czepia się: Ostrzeżenie 1 warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details. c:\users\admin\documents\visual studio 2012\projects\first\first\main.cpp 10 1 first

a przy _getch(); wszystko jest ok..? dziwne.

 

Z góry dzięki.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie bardzo rozumiem. Według mojej książki jest tak:

nazwa rozmiar precyzja

float 4 bajty 6–7 cyfr

double float 8 bajtów 15-16 cyfr

Tabela 5. Typy zmiennoprzecinkowe w C++

 

double (‘podwójny’), zgodnie ze swoją nazwą, zwiększa dwukrotnie rozmiar zmiennej

oraz poprawia jej dokładność. Tak zmodyfikowana zmienna jest nazywana czasem liczbą

podwójnej precyzji - w odróżnieniu od float, która ma tylko pojedynczą precyzję.

Skrócone nazwy

Na koniec warto nadmienić jeszcze o możności skrócenia nazw typów zawierających

modyfikatory. W takich sytuacjach możemy bowiem całkowicie pominąć słowa int i

float.

Przykładowe deklaracje:

unsigned int uZmienna;

short int nZmienna;

unsigned long int nZmienna;

double float fZmienna;

mogą zatem wyglądać tak:

unsigned uZmienna;

short nZmienna;

unsigned long nZmienna;

double fZmienna;

Wychodzi na to, że double float istnieje pod skróconą nazwą double i ma podwójną precyzję, 15-16 cyfr po przecinku. A więc co jest tutaj nie tak?

Korzystam z książki " Od zera do gier kodera"

 

Edit: Edie co masz na myśli mówiąc że zmienna jest albo float albo double, czy one się różnią?

Odnośnik do komentarza
Udostępnij na innych stronach

Racja, w tutorialu Xiona tak jest, ale zauważ że on jest dość stary. Używa bodajże VS 7.0 (2002). Kompilator VC++ mógł się przez ten czas nieco zmienić.

 

No i tak na przyszłość. Jeśli używasz:

void main()
{
}

 

Zamień to na:

int main()
{
  return 0;
}

 

W pierwszym poście masz float main() i nie wiem czemu to się w ogóle kompiluje.

 

Edit: Edie co masz na myśli mówiąc że zmienna jest albo float albo double, czy one się różnią?

Pewnie to:

nazwa | rozmiar | precyzja

float | 4 bajty | 6-7 cyfr

double | 8 bajtów | 15-16 cyfr

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...
W pierwszym poście masz float main() i nie wiem czemu to się w ogóle kompiluje.

 

Zbyt wysokopoziomowe myślenie.

 

Java/C# rzeczywiście będzie tworzyć problemy związane z typem funkcji main o ile nie jest typu void czy int, pomijając już kwestie statyczne.

 

W c++, ważne jest to, że funkcja main istnieje, i kompilator wie, od czego zacząć - oczywiście tak długo jak tak funkcja spełnia wszystkie wymogi - zwraca określoną wartość (oraz ide = vs).

 

Inną sprawą jest, że wystarczy skompilować program z funkcją float main, aby zobaczyć, że mimo wszystko kończy on pracę zwracając wartości całkowite zaokrąglane w dół min:

 

return 10/3 zwróci 3,

czy 10/4 zwróci 2.

 

oraz, że mimo zaokrąglania taka funkcja nie może zwrócić wyniku dzielenia przez zero = w takim wypadku otrzymamy następujący wyjątek:

 

        RtlRaiseException( (PEXCEPTION_RECORD) &ThisException );
        RaiseException( ThisException.ExceptionCode,
                        ThisException.ExceptionFlags,
                        ThisException.NumberParameters,
                        (PULONG_PTR)&ThisException.params );

Odnośnik do komentarza
Udostępnij na innych stronach

A o czymś takim jak standard c++ to Szanowny Pan Adam słyszał? :>

Oto jak ma wyglądać funkcja main(dwa warianty):

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

Jeśli kompilator kompiluje inne wersje, to jest to jakaś niepotrzebna pozostałość niezgodna ze standardem; mówiąc dobitniej, nie jest to element języka C++.

 

Zbyt wysokopoziomowe myślenie.

Wysokopoziomowość jest dobra.

Odnośnik do komentarza
Udostępnij na innych stronach

Yay, oczywiście że słyszałem o C++0x, oraz rozmywając wszelkie wątpliwości wiem również jak powinna wyglądać główna funkcja dowolnego programu napisanego w c++.

 

Co nie zmienia faktu, że odpisywałem bezpośrednio użytkownikowi Uterniko na jego wątpliwość w sprawie kompilacji - mianowicie, taki kod dalej będzie się kompilował, i to raczej dość bezproblemowo, jak na tak "karygodny" występek.

Dodatkowo, pokazałem że funkcja zamiast liczby rzeczywistej - zwróci liczbę całkowitą.

 

Wydaje mi się, że co bardziej sprytne osoby wychwycą bezużyteczność oraz niepoprawność (! - proszę zwrócić uwagę na to słowo, użyłem go sam : ) deklaracji main jako float - ponieważ, jaki jest cel deklaracji czegoś jako x, gdy i tak zwracana wartość jest bezczelnie rzutowana na integera.

 

Wysokopoziomowość jest dobra.

Nigdzie nie napisałem, że jest zła!

Napisałem tylko, że trochę jej zbyt dużo, w niektórych sytuacjach.

 

Pozdrawiam!

Adam

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...