Strona 4 z 4

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: niedziela, 17 stycznia 2010, 16:21
przez Cyfrowy Baron
W plikach pomocy można sprawdzić jakich bibliotek wymagają, funkcje, metody, klasy itp.

Kod: Zaznacz cały
#include <string.h>
#include <stdio.h>

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: niedziela, 17 stycznia 2010, 16:34
przez mko000

[BCC32 Error] Unit1.cpp(26): E2451 Undefined symbol 'wstring'
[BCC32 Error] Unit1.cpp(26): E2379 Statement missing ;
[BCC32 Error] Unit1.cpp(28): E2451 Undefined symbol 'locale'
[BCC32 Error] Unit1.cpp(28): E2379 Statement missing ;
[BCC32 Error] Unit1.cpp(29): E2304 Constant variable 'ctype' must be initialized
[BCC32 Error] Unit1.cpp(29): E2141 Declaration syntax error
[BCC32 Error] Unit1.cpp(43): E2451 Undefined symbol 'wstr'
[BCC32 Warning] Unit1.cpp(44): W8012 Comparing signed and unsigned values
[BCC32 Error] Unit1.cpp(46): E2451 Undefined symbol 'ct'
[BCC32 Error] Unit1.cpp(47): E2188 Expression syntax
[BCC32 Warning] Unit1.cpp(50): W8004 'wc' is assigned a value that is never used
[BCC32 Warning] Unit1.cpp(60): W8004 'iBytesWrite' is assigned a value that is never used


Po dodaniu tych bibliotek nadal nic sie nie zmienia

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: niedziela, 17 stycznia 2010, 17:01
przez Cyfrowy Baron
:w :w :w

Nie wiem co ty robisz źle, ale u mnie w C++Builder 2010 to działa bez żadnych problemów.

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: niedziela, 17 stycznia 2010, 19:02
przez Cyfrowy Baron
Już wiem w czym tkwi błąd! Źle podałem biblioteki, które należy dołączyć. Te które podałem są akurat zbędna, ale w pliku nagłówkowym (np. Unit1.h) musisz włączyć bibliotekę:

Kod: Zaznacz cały
#include <fstream.h>

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: niedziela, 17 stycznia 2010, 21:23
przez Witold
spróbuj dodać:

Kod: Zaznacz cały
#include <string>
#include <locale>

using namespace std;

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: niedziela, 17 stycznia 2010, 23:39
przez mko000
OK po dodaniu:
Kod: Zaznacz cały
#include <string.h>
#include <fstream.h>
#include <locale>

Program się kompiluje ale błedy jakieś są:

[BCC32 Warning] Unit1.cpp(47): W8012 Comparing signed and unsigned values
[BCC32 Warning] Unit1.cpp(63): W8004 'iBytesWrite' is assigned a value that is never used


Jutro sprawdzę to na 2010.

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: poniedziałek, 18 stycznia 2010, 10:19
przez Cyfrowy Baron

[BCC32 Warning]


Warning - znaczy: ostrzeżenie.

To nie błędy tylko ostrzeżenia.



Comparing signed and unsigned values - porównywane są wartości signed i usigned

Ostrzeżenie pojawia się dlatego, że zmienna i jest typu unsigned a zmienna iBytesRead jest typu int więc porównywane są ze sobą różne typy danych.

odnosi się do tej linii:


Kod: Zaznacz cały
for(unsigned i = 0; i < iBytesRead; ++i)


zamień na:

Kod: Zaznacz cały
for(int i = 0; i < iBytesRead; ++i)


można tez pozostawić tą linię tak jak jest, a zamienić typ zmiennej iBytesRead z int na unsigned,




'iBytesWrite' is assigned a value that is never used - 'iBytesWrite' ma przypisaną wartość, ale nigdy nie zostało użyte.

Ostrzeżenie pojawia się dlatego, że zmienna iBytesWrite zostaje wypełniona wartością, ale nigdy więcej nie jest używana, więc wydaje się być zbędna. Jest to prawdą, zmienna pozostała jeszcze z wcześniejszych eksperymentów, gdy kod miał nieco inną postać.

usuń tą linię:

Kod: Zaznacz cały
int iBytesWrite = 0;




spróbuj dodać:

Kod: Zaznacz cały
    #include <string>
    #include <locale>

    using namespace std;



W C++Builder 2010 te biblioteki są zbędne podobnie jak te, które podałem we wcześniejszym poście, wystarczy dodać tylko fstream.h, gdyż ta biblioteka zawiera już wszystkie niezbędne biblioteki.

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: poniedziałek, 18 stycznia 2010, 11:53
przez polymorphism
Jeśli mowa o tym kodzie, popraw jeszcze tę linię:
Kod: Zaznacz cały
wstr[i] += wc;

na
Kod: Zaznacz cały
wstr += wc;





Według standardu, przy załączaniu nagłówków standardowej biblioteki C++, nie dołącza się rozszerzenia .H, podajesz tylko samą nazwę. Czyli nie:
Kod: Zaznacz cały
#include <fstream.h>
#include <string.h>

tylko
Kod: Zaznacz cały
#include <fstream>
#include <string>

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: poniedziałek, 18 stycznia 2010, 12:32
przez Witold
Cyfrowy Baron napisał(a):
W C++Builder 2010 te biblioteki są zbędne podobnie jak te, które podałem we wcześniejszym poście, wystarczy dodać tylko fstream.h, gdyż ta biblioteka zawiera już wszystkie niezbędne biblioteki.


A jaki masz powód żeby dodać fstream.h ? Korzystasz z strumieni C++ ?
#include <string> jest dla wstring, #include <locale> dla locale.

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: poniedziałek, 18 stycznia 2010, 13:04
przez Cyfrowy Baron
A jaki masz powód żeby dodać fstream.h ? Korzystasz z strumieni C++ ?


No ja akurat w tym projekcie testowałem kilka porad i używałem strumieni, dlatego wystarczyło użyć tej biblioteki, inne były zbędne, co mnie trochę zmyliło. Ponieważ prezentowany tutaj kod nie korzysta ze strumieni, to rzeczywiście lepiej jest włączyć twoje biblioteki.




Według standardu, przy załączaniu nagłówków standardowej biblioteki C++, nie dołącza się rozszerzenia .H, podajesz tylko samą nazwę. Czyli nie:

Kod: Zaznacz cały
    #include <fstream.h>
    #include <string.h>


tylko

Kod: Zaznacz cały
    #include <fstream>
    #include <string>


No niestety, tutaj trzeba załączyć #include <fstream.h>, w przeciwnym razie kod się nie kompiluje. Przy zapisie #include <fstream> wyskakują takie same błędy jak przy braku biblioteki fstream.h. Co się zaś tyczy biblioteki string.h to przy zapisie #include <string> działa prawidłowo.

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: poniedziałek, 18 stycznia 2010, 13:12
przez Witold
Cyfrowy Baron napisał(a):
No niestety, tutaj trzeba załączyć #include <fstream.h>, w przeciwnym razie kod się nie kompiluje. Przy zapisie #include <fstream> wyskakują takie same błędy jak przy braku biblioteki fstream.h. Co się zaś tyczy biblioteki string.h to przy zapisie #include <string> działa prawidłowo.


using namespace std; ?

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: poniedziałek, 18 stycznia 2010, 13:23
przez Cyfrowy Baron
Tak. W połączeniu z using namespace std można dodać wpis #include <fstream>.

To jednak zastanawiające, gdyż w pliku fstream.h znalazłem taki wpis:

Kod: Zaznacz cały
#if !defined(__USING_STD_NAMES__) && defined(__cplusplus)
using namespace std;
#endif /* __USING_STD_NAMES__ */


więc w zasadzie powinno działać bez using namespace std przy zapisie #include <fstream>. Tak mi się wydaje.

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: poniedziałek, 18 stycznia 2010, 16:20
przez Witold
Cyfrowy Baron napisał(a):więc w zasadzie powinno działać bez using namespace std przy zapisie #include <fstream>. Tak mi się wydaje.


W katalogu includ’ów są pliki "fstream" i "fstream.h". Zdaje się że w pliku "fstream" nie ma takiego wpisu ja wyżej.

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: poniedziałek, 18 stycznia 2010, 17:30
przez Cyfrowy Baron
Jest w katalogu boost, czyli należy do grupy bibliotek boost, dlatego zastanawia mnie zasadność używania biblioteki fstream zamiast fstream.h.

Re: Wczytywanie plików binarnych do obiektu Memo - wg. pomysłu k

Nowy postNapisane: poniedziałek, 18 stycznia 2010, 20:32
przez Witold
Cyfrowy Baron napisał(a):Jest w katalogu boost, czyli należy do grupy bibliotek boost, dlatego zastanawia mnie zasadność używania biblioteki fstream zamiast fstream.h.


A w katalogu include\dinkumware nie ma tych plików: "fstream" , "fstream.h" ?