logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

C++ - Błędy w klasie zawodnik, konstruktorze i funkcji main()

dragonuppl 20 Lip 2014 15:09 1323 5
REKLAMA
  • #1 13811100
    dragonuppl
    Poziom 9  
    Posty: 9
    Ocena: 5
    Jestem nowy wiec prosze łagodni.
    mam tutaj taki kod:
    
    #include <iostream>
    #include <string.h>
    using namespace std;
    class zawodnik {
    	int punkty_sedzia1;
    	int punkty_sedzia2;
    	int punkty_sedzia3;
    	int punkty_sedzia4;
    	int punkty_sedzia5;
    	string imiona;
    public:
    	zawodnik (string wpisywanie, int liczba_sedzia1, int liczba_sedzia2, int liczba_sedzia3, int liczba_sedzia4, int liczba_sedzia5);
    	void pokaz (zawodnik suma);
    	
    	};
     
    
    
    
        zawodnik (string wpisywanie , int liczba_sedzia1 , int liczba_sedzia2 , int liczba_sedzia3 ,  int liczba_sedzia4 , int liczba_sedzia5)
    	{
    		imiona = wpisane_imie ;
    	 punkty_sedzia1 = liczba_sedzia1 ;
    	 punkty_sedzia2 = liczba_sedzia2 ;
    	 punkty_sedzia3 = liczba_sedzia3 ;
    	 punkty_sedzia4 = liczba_sedzia4 ;
    	 punkty_sedzia5 = liczba_sedzia5 ;
    	 
    	
    	}
    
    
    	void pokaz (zawodnik suma)
    	{
    
    
    	}
    
    
    main()
    
    {
    int l1 ;
    int l2 ;
    int l3 ;
    int l4 ;
    int l5 ;
    char imie ;
    char *wskaznik ;
    wskaznik = & imie ;
    	cout <<"prosze napisać imię zawodnika"<<endl;
    	cin >> &imie ;
    	cout <<"a teraz liczbe punktow od sedziego nr 1"<< endl;
    	cin >> &l1;
    	cout <<"a teraz liczbe punktow od sedziego nr 2"<< endl;
    	cin >> &l2;
    	cout <<"a teraz liczbe punktow od sedziego nr 3"<< endl;
    	cin >> &l3;
    	cout <<"a teraz liczbe punktow od sedziego nr 4"<< endl;
    	cin >> &l4;
    	cout <<"a teraz liczbe punktow od sedziego nr 5"<< endl;
    	cin >> &l5;
    	zawodnik &imie(imie,l1,l2,l3,l4,l5);
    
    
    
    
    
    
    
    
    
    }
    

    
    A tutaj błedy ktore otrzymalem po skompilowaniu:
    
    1>------ Build started: Project: proba1, Configuration: Debug Win32 ------
    1>  main.cpp
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C2146: syntax error : missing ')' before identifier 'wpisywanie'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C2146: syntax error : missing ';' before identifier 'wpisywanie'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C2512: 'zawodnik' : no appropriate default constructor available
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C2062: type 'int' unexpected
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C2059: syntax error : ')'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(21): error C2143: syntax error : missing ';' before '{'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(21): error C2447: '{' : missing function header (old-style formal list?)
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(42): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(54): error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion)
    1>          h:\program files\microsoft visual studio 10.0\vc\include\istream(1053): could be 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &&,signed char *)'
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits<char>
    1>          ]
    1>          h:\program files\microsoft visual studio 10.0\vc\include\istream(1060): or       'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &&,signed char &)'
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits<char>
    1>          ]
    1>          h:\program files\microsoft visual studio 10.0\vc\include\istream(1067): or       'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &&,unsigned char *)'
    1>          with
    1>          [
    1>              _Elem=char,
    1>              _Traits=std::char_traits<char>
    1>          ]
    
    


    oczywiscie ciagnie sie to dalej ale nie bede calosci kopiowac bo sie powtarza.
    Dla informacji powiem ze jestem w trakcie nauki i czytam symfonie c++.
    prosze aby ktoś dobroduszny poprawił kod i eventualnie wytłuamczyl mi moje bledy.
  • REKLAMA
  • #2 13811195
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Umieść kod w znacznikach [syntax]! Bez tego jest on nieczytelny.
    Nie zaszkodziło by także umieścić wyników kompilatora w [code]
  • REKLAMA
  • Pomocny post
    #3 13811273
    krru
    Poziom 33  
    Posty: 1819
    Pomógł: 230
    Ocena: 214
    dragonuppl napisał:
    Jestem nowy wiec prosze łagodni.
    mam tutaj taki kod:

    W pierwszej kolejności:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Jeśli <iostream> to i <string>.
    string.h to plik nagłówkowy zawierający funkcje do char * (strcpy, strcmp, itp)

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Nie ma czegoś takiego jak wpisane_imie - masz wpisywanie

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Imię zwykle ma więcej niż jedną literkę.

    Kod: text
    Zaloguj się, aby zobaczyć kod



    A po co te &?

    Kod: text
    Zaloguj się, aby zobaczyć kod


    A to już w ogóle nie wiadomo i co chodzi - masz już zmienną imie, więc zmienna klasy
    zawodnik musi się jakoś inaczej nazywać. I jak wyżej - po co & ?
  • REKLAMA
  • #4 13811535
    dragonuppl
    Poziom 9  
    Posty: 9
    Ocena: 5
    Dziekuje wam obu za pomoc.
    Co do & jest on juz zbedny przy CIN>>
    Ale ta linijka
    zawodnik &imie(imie,l1,l2,l3,l4,l5);
    rozumiałem ją tak klassa/konstruktor zawodnik pobiera nazwe z aresu(&) stringa imie
    przypisuje takie wartosci (imie,l1,l2,l3,l4,l5) do (string wpisywanie, int liczba_sedzia1, int liczba_sedzia2, int liczba_sedzia3, int liczba_sedzia4, int liczba_sedzia5)
    Powiedzcie gdzie popełniłem błąd w myśleniu.

    Dodano po 28 [minuty]:

    Zatem daje ponownie tym razem lepiej sformatowane i poprawione:
    #include <iostream>
    #include <string>
    using namespace std;
    class zawodnik {
    	int punkty_sedzia1;
    	int punkty_sedzia2;
    	int punkty_sedzia3;
    	int punkty_sedzia4;
    	int punkty_sedzia5;
    	string imiona;
    public:
    	zawodnik (string wpisywanie, int liczba_sedzia1, int liczba_sedzia2, int liczba_sedzia3, int liczba_sedzia4, int liczba_sedzia5);
    	void pokaz (zawodnik suma);
    	
    	};
     
    
    
    
        zawodnik (string wpisywanie , int liczba_sedzia1 , int liczba_sedzia2 , int liczba_sedzia3 ,  int liczba_sedzia4 , int liczba_sedzia5)
    	{
    		imiona = wpisywanie ;
    	 punkty_sedzia1 = liczba_sedzia1 ;
    	 punkty_sedzia2 = liczba_sedzia2 ;
    	 punkty_sedzia3 = liczba_sedzia3 ;
    	 punkty_sedzia4 = liczba_sedzia4 ;
    	 punkty_sedzia5 = liczba_sedzia5 ;
    	 
    	
    	}
    
    
    	void pokaz (zawodnik suma)
    	{
    
    
    	}
    
    
    main()
    
    {
    int l1 ;
    int l2 ;
    int l3 ;
    int l4 ;
    int l5 ;
    string imie ;
    	cout <<"prosze napisać imię zawodnika"<<endl;
    	cin >> imie ;
    	cout <<"a teraz liczbe punktow od sedziego nr 1"<< endl;
    	cin >> l1;
    	cout <<"a teraz liczbe punktow od sedziego nr 2"<< endl;
    	cin >> l2;
    	cout <<"a teraz liczbe punktow od sedziego nr 3"<< endl;
    	cin >> l3;
    	cout <<"a teraz liczbe punktow od sedziego nr 4"<< endl;
    	cin >> l4;
    	cout <<"a teraz liczbe punktow od sedziego nr 5"<< endl;
    	cin >> l5;
    	zawodnik &imie(imie,l1,l2,l3,l4,l5); 
    
    
    
    
    
    
    
    
    
    }




    A tutaj zamieszczam pełną informacje o błędzie:
    1>------ Build started: Project: proba1, Configuration: Debug Win32 ------
    1>  main.cpp
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C2146: syntax error : missing ')' before identifier 'wpisywanie'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C2146: syntax error : missing ';' before identifier 'wpisywanie'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C2512: 'zawodnik' : no appropriate default constructor available
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C2062: type 'int' unexpected
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20): error C2059: syntax error : ')'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(21): error C2143: syntax error : missing ';' before '{'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(21): error C2447: '{' : missing function header (old-style formal list?)
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(42): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(48): error C2872: 'string' : ambiguous symbol
    1>          could be 'd:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20) : zawodnik string'
    1>          or       'h:\program files\microsoft visual studio 10.0\vc\include\xstring(2063) : std::string'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(48): error C2872: 'string' : ambiguous symbol
    1>          could be 'd:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(20) : zawodnik string'
    1>          or       'h:\program files\microsoft visual studio 10.0\vc\include\xstring(2063) : std::string'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(48): error C2146: syntax error : missing ';' before identifier 'imie'
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(48): error C2065: 'imie' : undeclared identifier
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(50): error C2065: 'imie' : undeclared identifier
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(61): error C2065: 'imie' : undeclared identifier
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(61): error C2078: too many initializers
    1>d:\users\marcin\documents\visual studio 2010\projects\proba1\proba1\main.cpp(61): error C2440: 'initializing' : cannot convert from 'int' to 'zawodnik &'
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    
  • REKLAMA
  • #5 13811792
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Jeśli ta funkcja zawodnik miała być definicją metody klasy, to zdecydowanie brakuje określenia tejże. To samo z następną. Ponadto nie każdy kompilator pozwoli na definicję funkcji bez określenia zwracanego typu. Właściwie to klasa sobie jest ale w żaden sposób nie jest wykorzystywana czy zdefiniowana.
  • #6 13812793
    krru
    Poziom 33  
    Posty: 1819
    Pomógł: 230
    Ocena: 214
    Tak jak napisał poprzednik - jeśli deklarujesz metodę klasy poza klasą (poza {} od klasy)
    musisz podać pełną nazwę metody postaci klasa::metoda (a czasami dochodzi jeszcze namespace).
    Konstruktor będzie więc postaci:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Analogicznie pozostała (bo jest jedna) metoda.

    Akurat kontruktor nie ma typu zwracanego - nawet nie void.

    W C++ nie ma czegoś takiego jak zmienne o nazwie tworzonej dynamicznie. Są inne metody, zwykle polegające na użyciu bardziej rozbudowanych struktur danych. C++ dostarcza paru takich szablonów.
REKLAMA