deyvin12008 Opublikowano 22 Kwietnia 2013 Udostępnij Opublikowano 22 Kwietnia 2013 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 Więcej opcji udostępniania...
ediepl Opublikowano 22 Kwietnia 2013 Udostępnij Opublikowano 22 Kwietnia 2013 Zmienna może być albo double albo float. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 22 Kwietnia 2013 Udostępnij Opublikowano 22 Kwietnia 2013 Pewnie chodziło Ci o "long float a;". @down: Uuu rzeczywiście! Niechaj spłonę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Maximal Opublikowano 22 Kwietnia 2013 Udostępnij Opublikowano 22 Kwietnia 2013 W C++ nie ma czegoś takiego jak "long float". Jest za to "long double". :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
deyvin12008 Opublikowano 22 Kwietnia 2013 Autor Udostępnij Opublikowano 22 Kwietnia 2013 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 Więcej opcji udostępniania...
Utermiko Opublikowano 22 Kwietnia 2013 Udostępnij Opublikowano 22 Kwietnia 2013 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 Więcej opcji udostępniania...
ediepl Opublikowano 22 Kwietnia 2013 Udostępnij Opublikowano 22 Kwietnia 2013 Chodziło o to że nie można mieszać tych typów, aktualne typy danych możesz poszukać na google. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Szanowany Pan Adam Opublikowano 15 Czerwca 2013 Udostępnij Opublikowano 15 Czerwca 2013 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 Więcej opcji udostępniania...
Floodnik Opublikowano 15 Czerwca 2013 Udostępnij Opublikowano 15 Czerwca 2013 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 Więcej opcji udostępniania...
Szanowany Pan Adam Opublikowano 16 Czerwca 2013 Udostępnij Opublikowano 16 Czerwca 2013 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę