Error E2228 too many errors or warning - prośba o wytłumaczenie

0

Witam,
piszę swój pierwszy większy (w mojej opinii D:D) projekt.
Mam utworzoną tablicę do sudoku z 81 kontrolkami (nazwane od P1 do P81). Chcę je przypisać do różnych grup: Rząd, Kolumna, Kwadrat.

Robię to za pomocą warunku if łopatologicznie, tzn if (NazwaPola=='P1' II NazwaPola=='P2'.. do 'P9' ) to Rzad=1, potem rzad 2-gi, aż do 9-go. To samo z kolumną i kwadratem 3x3.

Wg mnie warunki są poprawne, ale zajmuje to hektary i wygląda ..no, bardzo drewnianie.
To nic, dla małego kwadratu 3x3 działało (mimo zgłaszanych warningów: W8089 multi-character character constant). Niestety, dla 9x9 juz się wysypuje. Podczas próby kompilacji wyskakuje info: E2228 Too many errors or warnings.

Proszę o:

  1. wytłumaczenie dlaczego wyskakują warningi
  2. wytłumaczenie czy E2228 jest spowodowany powyższym
  3. ew. inny sposób/pomysł na przypisanie /sprawdzenie do której z grup nalezy dana kontrolka.... (ha!, tak mi teraz wpadło.. może dodatkowymi wartościami parametrów każdej kontrolki, które moge na stałe ustawić? jakie moge użyć? potrzebuje 3-ch)
0

1. Czym to kompilujesz?
2. Czy przez: dla 9x9 juz się wysypuje. masz na myśli tylko kompilację?
3. Ciężko powiedzieć czemu dokładnie wyskakują warningi, ale to właśnie one dadzą Ci najlepszą informację dlaczego się pojawiają ;)

0
  1. Builder C++ 6
  2. Tak, przy próbie odpalenie programu kiedy ify określają całą, 9x9, tabelkę kontrolek, wyskakuje Error, którego nie było przy wcześniejszych próbach w skali 3x3
  3. a co oznacza "multi-character character constant" po ludzku?;)
2
k1313 napisał(a):
  1. wytłumaczenie dlaczego wyskakują warningi

ostrzeżenia mówią, że coś jest zgodne ze składnia języka, ale wygląda podejrzanie (coś jest/może być źle). Przykładowo operacja nic nie robi, albo może prowadzić do nieoczekiwanych rezultatów.
Zwykle warto naprawiać.

k1313 napisał(a):
  1. wytłumaczenie czy E2228 jest spowodowany powyższym

Ten tool chain najwyraźniej nie zatrzymuje się przy pierwszym błędzie, ale kontynuuje zadanie. Jeśli błędów jest dużo to wtedy stwierdza, że może faktycznie lepiej nie kontynuować.
Zacznij czytać informacje o błędach od samej góry i napoprawiaj je po kolei. Często kolejne błędy są tylko konsekwencją wcześniejszych błędów.

2
k1313 napisał(a):

if (NazwaPola=='P1' II NazwaPola=='P2'.. do 'P9' )

Masz tam '? Powinieneś używać " dla c-string constants.

1

Co do:

a co oznacza "multi-character character constant" po ludzku?;)

To dobrą odpowiedź masz tutaj.
Natomiast jeśli chodzi konkretnie o Twój kod, to sprawa jest prosta:
Podajesz dwa znaki: P1 oznaczając je dla kompilatora jako jeden, robiąc to znakiem '. Dlatego właśnie masz multi-character character. Zamiast tego użyj ", jeśli masz więcej niż jeden znak (character).

Pamiętaj tylko koniecznie o tym, że jeśli nie korzystasz z std::string to nie da się tak po prostu porównać łańcucha znaków z łańcuchem znaków korzystając z ==.

0

Ha! działa! co za błąd, co za błąd... ;)
dziękuję wszystkim za podpowiedź. lepiej dostać trzy niż żadnej :)

Pamiętaj tylko koniecznie o tym, że jeśli nie korzystasz z std::string to nie da się tak po prostu porównać łańcucha znaków z łańcuchem znaków korzystając z ==

to znaczy, że mam deklarować w przyszłości stringi w sposób: std::string NazwaPola, a nie AnsiString NazwaPola? to nie to samo?

1

Nie programuje w c++ więc potraktuj to jako psedo kod, ale nie potrzebujesz if'ów do określenia kolumny/rzędu, tylko możesz obliczyć.
Posiłkowałem się tym: https://www.programiz.com/cpp-programming/examples/quotient-remainder

Zakładając, że z NazwaPola wyciągniesz numer i będziesz miał to w zmiennej nk
czyli dla p1 nk = 1, dla p2 nk = 2 itd.
to policzyć możesz tak

rzad = (nk-1) / 9 + 1;
kolumna = nk - ((nk-1) / 9 * 9);

Zawsze to 18 ifów mniej ;)

0

ok, wielkie dzięki wszystkim, temat można zamknąć.

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