Pierwszy Program » Częste Problemy
Na koniec warto zwrócić uwagę co może spowodować błąd kompilacji, lub czego nie powinniśmy robić, żeby kod był zgodny z dobrymi praktykami.
Pomijanie std::
Pominięcie std::
bez wcześniejszego użycia instrukcji using
spowoduje błąd.
🔴 Treść błędu:
- GCC
- MSVC
👌 Rozwiązanie problemu
Dodanie instrukcji using std::cout;
na górze funkcji main
:
#include <iostream>
int main() {
using std::cout;
cout << "Witaj, Świecie!";
}
Nie dołączenie odpowiedniego nagłówka
Bardzo łatwo (nawet dla ekspertów) zapomnieć o #include
.
🔴 Treść błędu:
- GCC
- MSVC
Brak średników ;
Początkujący często zapominają o średnikach (;
) na końcach
instrukcji.
Prześledź dokładnie przykłady kodu, podawane
w tej lekcji zwracając uwagę, gdzie powinny one się znaleźć.
🔴 Treść błędu:
- GCC
- MSVC
Kompilatory próbując wykryć gdzie brakuje średnika często muszą zgadywać. Z tego powodu, jeśli jesteś pewny, że w podanej przez kompilator linii nie brakuje średnika, sprawdź również kilka linijek, które otaczają tą podaną.
Dodatkowo, brakujące średniki mogą powodować inne niezwiązane błędy niżej w Twoim kodzie. Zazwyczaj najbardziej pomocna jest treść pierwszego błędu wystosowanego przez kompilator.
Niezakończony tekst
Tekst zawsze zawieramy pomiędzy znakami podwójnego cudzysłowia "TUTAJ WSTAWIAMY TEKST!"
.
Jeśli zapomnimy go zakończyć drugim znakiem, C++ będzie myślał, że reszta naszego programu to tekst
🔴 Treść błędu
- GCC
- MSVC
Wyświetlanie znaku "
Może Cię kusić, aby umieścić cudzysłów wewnątrz komunikatu, gdy wypisujesz go na konsolę.
Pamiętaj jednak, że C++ traktuje wszystko, co znajduje się wewnątrz "..."
, jako tekst.
Z tego powodu, jeśli napiszesz:
"Cześć! Nazywam się "Diego", witaj w kolonii!"
C++ zinterpretuje to jako
"TEKST" KOD C++ "TEKST"
Możesz temu zapobiec dodając backslash (\
) przed cudzysłowem, by użyć tzw. escape-sequence.
"Cześć! Nazywam się \"Diego\", witaj w kolonii!"
🔴 Treść błędu
- GCC
- MSVC
error: unable to find string literal operator ‘operator""Diego’ with ‘const char [20]’, ‘long unsigned int’ arguments
🖼 Ilustracja błędu:
TODO
error C3688: invalid literal suffix 'Diego'; literal operator or literal operator template 'operator ""Diego' not found
error C2143: syntax error: missing ';' before 'string'
🖼 Ilustracja błędu:
Powyższe komunikaty o błędach nie są zbyt pomocne! Realną wskazówką powinien być fakt, że program traktuje to, co ma być tekstem, jako kod (widać to w edytorze kodu).