64 bit - ok / 32 bit - not ok / problem z kompilacją.
Ostatnio zmodyfikowano 2023-02-25 19:57
befejak Temat założony przez niniejszego użytkownika |
64 bit - ok / 32 bit - not ok / problem z kompilacją. » 2023-02-24 13:00:20 Witam, jakiś czas temu zapytałem o tworzenie programu do pisania tekstu w nim ( od zaplecza ) i od jakiegoś czasu zajmuję się tym zagadnieniem.
Postanowiłem rozwijać swojego własnego "Stringa" na te potrzeby i kiedy kompiluję z GCC 64 bit nie mam żadnego problemu i żadnego errora na konsoli ( może poza jednym ale to mogę zignorować )
ale GCC 32 bit-owy kompilator odmawia skompilowania mówiąc że: main.cpp|225|error: no matching function for call to 'qlString::qlString(qlString)'
qlString Test("abc"); <-- Bez problemu dla 32 i 64 bit
qlString StringsArray[] = {"Test","abc","a b c d e f g h","ehem"}; <-- 32 bit nie kompiluje
struct abcST{ qlString Name; int a,b,c; }qqTest={"SomeName",1,2,3}; <-- 32 bit nie kompiluje
Taka funkcja istnieje: * w Struct qlString qlString( qlString &_String ){Exist=false;Length=0;Error=-1;qSet(_String.Char);}
i 64 bitowy kompilator ją widzi i używa bez problemu w tym samym czasie 32 jakby był "ślepy" dla tej funkcji.
Do kompilacji używam CodeBlocks z ich 32 bitowym GCC dostarczonym wraz z instalacją. 64 bitowy GCC pobrałem z internetu.
Zastanawia mnie więc czy to 32 bitowy kompilator jest jakiś przestarzały, Czy może to ja robię coś źle a 64 bitowy kompilator jest na tyle sprytny by to poprawić po mnie?... |
|
DejaVu |
» 2023-02-25 10:28:10 Zła definicja konstruktora: qlString( qlString & _String )
Dobra definicja konstruktora: qlString( const qlString & _String )
|
|
befejak Temat założony przez niniejszego użytkownika |
» 2023-02-25 16:06:44 Hmm, faktycznie po dodaniu Const do konstruktora 32 bitowy kompilator teraz działa. Najwyraźniej to 64 bitowy poprawiał po mnie cały ten czas.
Ale pozwolę sobie jeszcze zapytać - Czemu? Bo prawdę mówiąc całkowicie nie rozumiem czemu "Const" jest wymagane w tym miejscu.
Inny error który oba kompilatory (32 i 64 bit) wyświetlają to: |230|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
Dodając "Const" do funkcji wszystkie problemy i errory poznikały, ale całkowicie nie rozumiem co to zmienia dodając const.
Jeśli dobrze rozumiem "Const" działa jak można powiedzieć "flaga - Read Only"? Czy ma też inne zastosowania? |
|
pekfos |
» 2023-02-25 17:07:26 Wygląda na to że zmieniasz także wersję standardu C++. ale GCC 32 bit-owy kompilator odmawia skompilowania mówiąc że: main.cpp|225|error: no matching function for call to 'qlString::qlString(qlString)' To jest niekompletny komunikat błędu, z GCC 4.X, lub starszego. Jaki rocznik ma ten twój 32-bitowy code blocks? |
|
befejak Temat założony przez niniejszego użytkownika |
» 2023-02-25 18:25:56 Prawdę mówiąc to nie pamiętam skąd pobrałem CodeBlocks, Wcześniej pisałem w Java i używałem Eclipse ale postanowiłem się przesiąść na C++.
Pobrałem z jakiegoś źródła jakie było podane w artykule który czytałem, Mało to może mówi ale "Data Modyfikacji" codeblock.exe -> 2016 rok ( więc zapewne z tego roku )
Kompilator 64 bitowy pobrałem ponad miesiąc temu ale również już nie pamiętam z jakiej strony.
Co prawda to wysłałem tylko jedną linię z błędu bo uznałem że jest tylko ta pierwsza ważna Tutaj jest reszta lini z "Błędem"
|231|error: no matching function for call to 'qlString::qlString(qlString)'| |231|note: candidates are:| |219|note: qlString::qlString(qlString&)| |219|note: no known conversion for argument 1 from 'qlString' to 'qlString&'| |218|note: qlString::qlString(char*)| |218|note: no known conversion for argument 1 from 'qlString' to 'char*'| |217|note: qlString::qlString()| |217|note: candidate expects 0 arguments, 1 provided|
Hmm... teraz muszę przyznać się do własnego błędu bo gdybym od początku przeczytał wszystkie linie błędu może bym sam coś wykombinował.
Zamieniłem konstruktor z argumentem qlString zamiast "&" użyłem "*" i skasowałem Const qlString( qlString *_String ){Exist=false;Length=0;Error=-1;qSet(_String -> Char);}
Innymi słowy 32 bitowy kompilator kompiluje jeśli użyję "Const" lub "*" zamiast "&" ale nie mam pojęcia czemu. Prawdopodobnie źle zrozumiałem znaczenie "&" :/...
|
|
pekfos |
» 2023-02-25 19:57:46 Innymi słowy 32 bitowy kompilator kompiluje jeśli użyję "Const" lub "*" zamiast "&" ale nie mam pojęcia czemu. Konstruktor qlString(qlString*) ma tu tak mało sensu, że efektywnie go skasowałeś. Teraz do kopiowania jest używany konstruktor kopiujący wygenerowany przez kompilator i pewnie nie robi tego czego oczekujesz. |
|
« 1 » |