VisualStudio, szablony klas, oraz bezpańska konwersja

0

Witam wszystkich, to mój pierwszy post, więc proszę o wyrozumiałość :P

Otóż mam dwa pytania a propos VisualStudio:
dlaczego gdy tylko rozpocznę pisanie szablonu klasy, wyłącza się "sprawdzanie poprawności"?
z wejściem w ekran linijki template <class typename_Ty> ...
kompilator nie zareaguje nawet na wulgaryzmy w jego stronę (tak dla zobrazowania jego obojętności..)

drugie pytanie całkowicie new_bie- piszę program w kilku modułach i niestety czasami aby kompilator "zaskoczył" zmiany w jakimś pliku pobocznym, muszę dokonać (nawet idiotycznej) zmiany czegokolwiek w pliku głównym, dopiero wtedy automatycznie kompilator kompiluje całość od nowa. Da się to jakoś inaczej osiągnąć? Jakieś ustawienia typu: kompiluj zawsze całość?

A teraz pytanie na temat konkretnego problemu..
W ramach treningu na szablonach klas napisałem prostą klasę działającą jak std::vector;
po paru problemach wszystko działa jak należy, z wyjątkiem..

  • fragment kodu: *
    template <class typename_Ty>
    class my_vector
    {
    ..
    public:
    my_vector(int size = 0); // konstruktor z możliwością podania rozmiaru, po prostu tworzy tablicę dynamicznie z jakąś tam nadwyżką w pamięci- nieistotne (chyba);
    ..
    };

w czym problem: otóż.. wg kompilatora, całkiem normalne i bezproblemowe jest wykonanie istrukcji:
my_vector<double> test;
test = 5; // WEKTOR = 5 !!!!
Idąc breakpointami zauważyłem, że traktuje tą linijkę w ten sposób:
test = my_vector(5);
a więc.. kto go upoważnił do tej bezprawnej konwersji?? i co najważniejsze.. jak to zatrzymać.

Dla przykładu:
jeśli zrobimy vector<double> test2;
test2 = 5; // wyswietli sie komunikat o bledzie: no operator "=" matches these operands.
tak jak być powinno..

2

Jakiej bezprawnej? Nie dałeś explicit to masz.

explicit my_vector(int size = 0); 

Co do przebudowywania projektu, to absolutnie każde normalne IDE ma coś takiego jak clean albo od razu rebuild. Poszukaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1