Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] error: declaration of ‘size_t el’ shadows template parm ‘int el’

Ostatnio zmodyfikowano 2014-04-13 16:04
Autor Wiadomość
Orb
Temat założony przez niniejszego użytkownika
[C++] error: declaration of ‘size_t el’ shadows template parm ‘int el’
» 2014-04-12 22:03:36
Kolejne przeładowanie i kolejny orzech do zgryzienia.

C/C++
#include <iostream>

using namespace std;

template < typename T, int el >
class Tablica
{
public:
    Tablica()
        : liczba_elementow( el )
    {
    }
    operator bool() { return( liczba_elementow != 0 ); }
    bool operator !() { return( liczba_elementow == 0 ); }
    T & operator []( size_t el ) { return Tab[ el ]; }
   
private:
    T Tab[ el ];
    size_t liczba_elementow;
};

Przy próbie kompilacji zawierającej powyższą klasę kompilator wypluwa mi błędy:
poligon.cpp:14:26: error: declaration of ‘size_t el’
poligon.cpp:5:23: error:  shadows template parm ‘int el’
poligon.cpp: In member function ‘T& Tablica<T, el>::operator[](size_t)’
poligon.cpp:14:7: error: declaration of ‘size_t el’
poligon.cpp:5:23: error:  shadows template parm ‘int el’

Zawsze przy błędach typu declaration of... bla, bla, bla od razu pisało co jest nie tak z tą deklaracją. Teraz zaś kompilator nie daje mi żadnej sugestii jak to ugryźć. Natomiast przy shadows template parm nie jestem w stanie przetłumaczyć w żaden sensowny sposób na polski, a co dopiero zrozumieć ( cień szablon parametr?!? aż ciśnie się na usta: What the f*ck! ). Jak ja nienawidzę wszelkich odmian tej prymitywnej germańszczyzny. W szczególności szwabskiego i yankeskiego.
P-108081
bombatom69
» 2014-04-12 23:25:34
el jest parametrem szablonu, typ int.
Następnie w operatorze próbujesz używać go w obrębie szablonu jako typ size_t czyli uint.
P-108088
Orb
Temat założony przez niniejszego użytkownika
» 2014-04-12 23:37:31
Gdybym nie spróbował tak banalnych opcji, to bym nie zakładał na forum tematu. Próbowałem zarówno zmienić parametr szablonu na size_t, jak i parametr przeładowania na int. W obydwóch przypadkach kompilator pluje tym samym, tylko w drugim log w apostrofach pokazuje int, zamiast size_t.
P-108089
Monika90
» 2014-04-13 08:59:43
Jakiej "prymitywnej germańszczyzny"? Ty zwyczajnie bredzisz.

Wybrałeś sobie hobby (albo gorzej - zawód) w którym kontak z j. angielskim jest codziennością. Jak sie nie nauczysz podstaw angielskiego, to będziesz skazany na pełne błędów wiki (takie jak to http://pl.wikibooks.org/wiki​/C%2B%2B​/Przeci%C4%85%C5%BCanie_operator%C3%B3w)

Komunikat kompilatora jest jasny. Lokalnie zadeklarowana nazwa nie może być taka sama jak nazwa parametru szablonu. W operatorze [] zmień
size_t el
 na np.
size_t index
P-108094
Orb
Temat założony przez niniejszego użytkownika
» 2014-04-13 16:04:13
Na początek dzięki za pomoc. Po poprawieniu tego co mi wytknęłaś wsio działa. Korzystam dokładnie z tego kursu, który zapodałaś. Chyba trzeba zmienić kurs, bo to już nie pierwszy taki kwiatek nad którym musiałem się zastanowić. Do tej pory to tolerowałem, ale to był pierwszy z którym nie poradziłem sobie sam.

Zgadzam się całkowicie z tym, że bez angielskiego w informatyce ani rusz, jednak jeśli znajdzie się coś sensownego po polsku, to już kilkaset lat temu Kochanowski mawiał, że Polacy nie gęsi.

Wiem, bo c++ to nie jest mój pierwszy język, całej składni pythona nauczyłem się z polskojęzycznych materiałów a dopiero obsługę bibliotek musiałem ogarniać w eng. Co innego czytanie takich książek jak "Thinking in c++", bo one uczą sposobu myślenia programisty, zaś czytając po polsku nie czytamy tego co autor ma nam do przekazania, tylko to jak słowa autora zrozumiał tłumacz. Tak samo z czytaniem dokumentacji technicznej. Ale bez przesady, żeby twierdzić iż nie da się po polsku konstrukcji składniowych c++? Kochanowski w grobie się przewraca.

Jednak to, że wiki ma masę błędów nie znaczy, że po polsku nie da się napisać dobrego kursu programowania. Co najwyżej znaczy, że autor tego konkretnego poradnika był idiotą i nie skompilował podawanych przykładów przed upublicznieniem ich.

Zaskoczę cię, że mimo iż tego konkretnego komunikatu nie zrozumiałem, to znam angielski na tyle, że tłumaczyłem wielokrotnie całe źródła z tekstów historycznych po staroangielsku, który jest jeszcze bardziej trudny niż anglik techniczny. Poza tym też jestem zdania, że angielskiego w informatyce się nie uniknie, jednak to nie zmienia faktu, że język ten jest kolejnym odłamem prymitywnej germańszczyzny. Bo jak inaczej nazwać język, który prostownik nazywa się battery charger, czyli dosłownie tłumacząc ładowator baterii ( żeby nie powiedzieć ładowator bateria, bo język jest tak prymitywny, że nie potrzebuje odmiany przez przypadki ). Albo przykład logów które sprawiały mi problem. Po twoim tłumaczeniu są zrozumiałe ( to, rzuca cień na tamto znaczy, że... ), ale nie mów mi, że to nie jest dużo bardziej prymitywne, niż gdyby napisali local variable... ( jak kompilator pluje czymś w tym stylu, to rozumiem bez problemu ).

Dlatego mimo że nienawidzę tego języka tak samo, jak kocham programować dzielnie użeram się z nim, mimo że wolałbym już uczyć się o niebo trudniejszego chińskiego, czy japońskiego niż kaleczyć swój język i tok myślenia tą prymitywną mową.

Pod koniec jeszcze raz dzięki za pomoc. Poszukam innego kursu ( zacznę od tego na tej stronie ). A jak nie znajdę nic sensownego w ojczystym języku, to po skończeniu nauki składni c++ z angielskojęzycznych stron napiszę własny, aby udowodnić, że jednak naprawdę Polacy nie gęsi. Zwłaszcza, że posiadamy jeden z najbardziej zaawansowanych języków na świecie i powinniśmy być z tego dumni.
P-108120
« 1 »
  Strona 1 z 1