Nauka c++

Wszystko o czym chcecie dyskutować a tyczy się choć trochę Slackware Linux i nie tylko!

Moderatorzy: Moderatorzy, Administratorzy

lone_wolf

Nauka c++

Post autor: lone_wolf »

Witam, jest taka sprawa. Kiedyś zassałem w postaci pdf "Symfonia c++" J Grębosza.Wczoraj to odnalazłem na jednej z płyt i postanowiłem choć liznąć podstawy c++. Napisałem coś takiego

Kod: Zaznacz cały

#include <iostream.h>
main()
{
cout << "samotny wilk\n";
}
Program się kompiluje, wyświetla to co trzeba, tylko w momencie kompilacji otrzymuję taki komunikat

Kod: Zaznacz cały

lone_wolf@darkstar:~$ g++ nauka.cpp
In file included from /usr/include/c++/3.3.6/backward/iostream.h:31,
                 from nauka.cpp:1:
/usr/include/c++/3.3.6/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
Tu widać jaką komendę wydaję i jaki komunikat mi wyświetla.Czy ktoś może mi powiedzieć skąd ta informacja??
jose
Użytkownik
Posty: 11
Rejestracja: 2004-12-11, 23:13
Lokalizacja: Warshau

Re: Nauka c++

Post autor: jose »

Yyyy... stąd:
Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use

Kod: Zaznacz cały

-Wno-deprecated
.
Zamiast:

Kod: Zaznacz cały

<iostream.h>
winno być:

Kod: Zaznacz cały

<iostream>
Tudzież:

Kod: Zaznacz cały

-Wno-deprecated
Jako opcja kompilatora, coby nie pokazywał ostrzeżenia.
Jeśli zależy Ci na jakości, zrób to sam.
lone_wolf

Re: Nauka c++

Post autor: lone_wolf »

Dzięki, pomogło to: -Wno-deprecated
Przy #include <iostream> otrzymałem

Kod: Zaznacz cały

 nauka.cpp: In function `int main()':
nauka.cpp:4: error: `cout' undeclared (first use this function)
nauka.cpp:4: error: (Each undeclared identifier is reported only once for each
   function it appears in.)
jose
Użytkownik
Posty: 11
Rejestracja: 2004-12-11, 23:13
Lokalizacja: Warshau

Re: Nauka c++

Post autor: jose »

Dopisując -Wno-deprecated wcale nie pozbyłes się problemu tylko go obszedłeś (spowodowałes, że kompilator nie krzyczy o błędy). Dawno nie bawiłem sie w c++, ale imho kod tego programu powinien wyglądać jakoś tak:

Kod: Zaznacz cały

 #include <iostream>
main()
{
std::cout << "samotny wilk\n";
} 
Zauważ, że zamiast:

Kod: Zaznacz cały

cout 
Jest:

Kod: Zaznacz cały

std::cout 
Jeśli zależy Ci na jakości, zrób to sam.
Awatar użytkownika
Rush
Użytkownik
Posty: 348
Rejestracja: 2005-05-18, 21:24
Lokalizacja: Gdańsk

Re: Nauka c++

Post autor: Rush »

Wogole nie bawie sie w C++, ale jezeli chcesz uzywac samo cout to powinienes zrobic na poczatku:

Kod: Zaznacz cały

using namespace std;
lone_wolf

Re: Nauka c++

Post autor: lone_wolf »

Sprawdziłem obie metody, obie działają :)
Mefju
Użytkownik
Posty: 75
Rejestracja: 2005-11-02, 15:47
Lokalizacja: Białystok

Re: Nauka c++

Post autor: Mefju »

Jeśli będziesz korzystać z innych przestrzeni nazw, np. biblioteki boost, to użycie sposobu z

Kod: Zaznacz cały

std::cout
jak to przedstawił @jose jest imho bardziej czytelne.
To tak na marginesie.
Awatar użytkownika
Rush
Użytkownik
Posty: 348
Rejestracja: 2005-05-18, 21:24
Lokalizacja: Gdańsk

Re: Nauka c++

Post autor: Rush »

Mefju pisze:Jeśli będziesz korzystać z innych przestrzeni nazw, np. biblioteki boost, to użycie sposobu z

Kod: Zaznacz cały

std::cout
jak to przedstawił @jose jest imho bardziej czytelne.
To tak na marginesie.
To już szybciej printf-nąć ;)
lone_wolf

Re: Nauka c++

Post autor: lone_wolf »

Rush pisze:To już szybciej printf-nąć Wink
Można ale to już nie to, przynajmniej moim zdaniem
ikar
Użytkownik
Posty: 12
Rejestracja: 2006-01-18, 12:18
Lokalizacja: Otwock

Re: Nauka c++

Post autor: ikar »

Możliwości jest masa. Zalezy co ma robić program. C++ to potęzne nażędzie i jesli ma słuzyć do pisania "hello? I'm Joe" To lepiej innego języka się uczyć.

Natomiast ja mam zagwozdkę i ciekaw jestem kto może mi pomuc.
----------------------------------------------------------------------------------------------------------
#include <iostream>
using namespace std;

struct mebel{
char nazwa;
int waga;
double cena;
};

main()
{
mebel *stolik = new stolik[3];

stolik[0]={"pinio", 15, 253.5};
stolik[1]={"dominik", 10, 183.99};
stolik[2]={"iza", 18, 300.78};

cout<<"nazwa: "<<stolik[0]->nazwa;
cout<<"waga: "<<stolik[0]->waga;
cout<<"cena: "<<stolik[0]->cena;

return 0;
}

Zastosowanie może nie najfajniejsze ale sam zamyłs mysle dobry. Tyko czemu nie działa?
power of proof
lone_wolf

Re: Nauka c++

Post autor: lone_wolf »

ikar pisze:C++ to potęzne nażędzie i jesli ma słuzyć do pisania "hello? I'm Joe" To lepiej innego języka się uczyć.
Domyślam się że przychodząc na świat znałeś kompletnie C++ i nie musisz się uczyć podstaw.Gratuluję talentu i życzę powodzenia.
b4rtus
Użytkownik
Posty: 251
Rejestracja: 2005-07-07, 13:44
Lokalizacja: wieś :)

Re: Nauka c++

Post autor: b4rtus »

ikar pisze:To lepiej innego języka się uczyć.
Tobie proponuje na początek pouczyć sie języka polskiego i ortografii :idea:
A start-up engineer is someone who solves a problem you didn't know you had, in a way you don't understand. :devil2:
ikar
Użytkownik
Posty: 12
Rejestracja: 2006-01-18, 12:18
Lokalizacja: Otwock

Re: Nauka c++

Post autor: ikar »

Sorki za błędy. A jesli chodzi o to tekst "Domyślam się że przychodząc na świat znałeś kompletnie C++ i nie musisz się uczyć podstaw.Gratuluję talentu i życzę powodzenia." to źle mnie zrozumiałeś. Sorki jesli cię uraziłem. Postaram się lepiej dobierać słowa.
power of proof
Mefju
Użytkownik
Posty: 75
Rejestracja: 2005-11-02, 15:47
Lokalizacja: Białystok

Re: Nauka c++

Post autor: Mefju »

Wg mnie powinno być mniej więcej tak:

Kod: Zaznacz cały

#include <iostream>
using namespace std;

struct mebel{
char* nazwa;
int waga;
double cena;
};

int main()
{
mebel *stolik = new mebel[3];

stolik[0].nazwa="pinio";
stolik[0].waga=15;
stolik[0].cena=253.5;

stolik[1].nazwa="dominik";
stolik[1].waga=10;
stolik[1].cena=183.99;

stolik[2].nazwa="iza";
stolik[2].waga=18;
stolik[2].cena=300.78;

cout<<"nazwa: "<<stolik[0].nazwa;
cout<<"waga: "<<stolik[0].waga;
cout<<"cena: "<<stolik[0].cena;

return 0;
}
Kilka słów wyjaśnienia.
1) Typ char, który użyłeś w strukturze rezerwuje 2 bajty pamięci na pojedynczy znak. Do napisów używa się typu char* lub string.
2) Miałeś błąd składniowy przy przydzielaniu pamięci operatorem new.
3) Wypełnianie tablicy stolik musi być przez jawne podanie elementu struktury do którego wstawiasz dane. Może jest na to jakiś krótszy sposób, dawno nie pisałem w C/C++.
4) Przy wypisywaniu na ekran elemetów struktury odwołujesz się do nich bezpośrednio przez kropkę. Strzałki służą do odwołania się przez wskaźnik.
5) dobrym zwyczajem jest pisanie

Kod: Zaznacz cały

int main()
PS. W takiej postaci program poprawnie się kompiluje i uruchamia.

Pozdrawiam
Awatar użytkownika
benetnash
Moderator w st. spocz.
Posty: 1467
Rejestracja: 2004-12-17, 20:09
Lokalizacja: Poznań
Kontakt:

Re: Nauka c++

Post autor: benetnash »

Mefju pisze: 1) Typ char, który użyłeś w strukturze rezerwuje 2 bajty pamięci na pojedynczy znak. Do napisów używa się typu char* lub string.
ja daję rękę, że na 32 bitowej platformie char to 1 bajt
[url=http://www.icpnet.pl/~benetnash/benetnash.asc]GnuPG[/url]
ODPOWIEDZ