Arekadiusz Opublikowano 18 Grudnia 2012 Udostępnij Opublikowano 18 Grudnia 2012 Witam! Postanowiłem nie dawno spróbować Visual C++ 2010 Express, gdyż przeczytałem że jest to wersja darmowa nawet do zastosowań komercyjnych. No ale do rzeczy. Wczoraj zacząłem pisać programik, który zapisuje tekst i liczby do pliku linia po linii. Mój kod wygląda tak: fstream plik; plik.open( "C:/plik.txt", ios::in | ios::out ); if( plik.good() == true ) { plik << pole1->Text; plik << "\n"; plik << pole2->Text; plik << "\n"; plik << pole3->Text; plik.close(); ShowMessage("Gotowe!"); } else ShowMessage("Nie można utworzyć pliku!"); W poprzednim środowisku ten kod mi działał a w Visualu C++ pomimo różnych kombinacji nie chce. Zarzuca mi błąd: Error 1 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'System::String ^' (or there is no acceptable conversion) Próbowałem najpierw pobrać tekst z pól do zmiennych 'System::String ^' ale wtedy nie mam pojęcia jak to zapisać. Robię tak: System::String^ zm1=pole1->Text; System::String^ zm2=pole2->Text; System::String^ zm3=pole3->Text; fstream plik; plik.open( "E:/pliczek.txt", ios::in | ios::out ); if( plik.good() == true ) { plik << zm1; plik << "\n"; plik << zm2; plik << "\n"; plik << zm3; plik.close(); ShowMessage("Gotowe!"); } else ShowMessage("Nie można utworzyć pliku!"); I wyświetla się ten sam błąd co powyżej :( Byłbym bardzo wdzięczny jakby ktoś mi powiedział co robię źle i jak to poprawnie zapisać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 18 Grudnia 2012 Udostępnij Opublikowano 18 Grudnia 2012 Nie znam się zbyt na C++, ale sądzę iż problem tkwi w tym, że używasz klasy "string" z .NET. System::String != std::string. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 18 Grudnia 2012 Autor Udostępnij Opublikowano 18 Grudnia 2012 W takim razie co powinienem zrobić? Zamienić System::String^ na std::string? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 18 Grudnia 2012 Udostępnij Opublikowano 18 Grudnia 2012 Powyższy kod to nie C++, a C++/CLI. Jak zmienisz na std::string to będziesz musiał konwertować System::String z .NET'owego TextBoxa między managed a unmanaged code, bodajże przy użyciu klasy Marshal (http://msdn.microsoft.com/en-us/library/sy...es.marshal.aspx). Jeśli chcesz pisać w .NET to C#. C++/CLI to tylko wtedy, kiedy musisz mieszać kod zarządzany z niezarządzanym. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 18 Grudnia 2012 Autor Udostępnij Opublikowano 18 Grudnia 2012 Nie na razie nie chcę przerzucać się na C#... Więc co mam zrobić w obecnej sytuacji? Mam System::String^ i jak zamienić to tak, abym mógł zapisać tekst z pola do pliku? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 18 Grudnia 2012 Udostępnij Opublikowano 18 Grudnia 2012 Znalazłem coś takiego http://stackoverflow.com/questions/946813/...ng-to-stdstring Może po prostu użyj zwykłego WinAPI (choć podobno bardzo niewygodne) jeśli nie chcesz pchać się na .NET. @EDIT Ewentualnie użyj klasy StreamWriter z .NET. Dokumentacja na MSDN. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 18 Grudnia 2012 Autor Udostępnij Opublikowano 18 Grudnia 2012 Zrobiłem na razie coś takiego przy pomocy tego linku i program ładnie się kompiluje tylko że plik się nie tworzy... :( Mój kod: System::String^ zm1=pole1->Text; System::String^ zm2=pole2->Text; System::String^ zm3=pole3->Text; std::string zm4=msclr::interop::marshal_as< std::string >( zm1); std::string zm5=msclr::interop::marshal_as< std::string >( zm2); std::string zm6=msclr::interop::marshal_as< std::string >( zm3); fstream plik; plik.open( "E:/plik.txt", ios::in | ios::out ); if( plik.good() == true ) { plik << zm4; plik << "\n"; plik << zm5; plik << "\n"; plik << zm6; plik.close(); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 18 Grudnia 2012 Udostępnij Opublikowano 18 Grudnia 2012 Przeszukaj dokładnie folder z projektem lub skompiluj w trybie Release. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 18 Grudnia 2012 Autor Udostępnij Opublikowano 18 Grudnia 2012 Zrobiłem to i po mimo tego pliku nie ma. Tylko że nie wiem co to miało by dać bo projekt mam w folderze na pulpicie (dysk C) a plik ma się stworzyć na dysku E więc...? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 18 Grudnia 2012 Udostępnij Opublikowano 18 Grudnia 2012 Sory, źle zrozumiałem. Myślałem, że chodzi ci o to, że nie wiesz gdzie execa masz. Poszukaj w googlach. Na pewno coś znajdziesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 18 Grudnia 2012 Autor Udostępnij Opublikowano 18 Grudnia 2012 Spoko! Chyba nawet już rozwiązałem swój problem ;) Funkcja StreamWriter i StreamReader przyszła mi z pomocą i jak na razie jest dobrze. Plik się pięknie tworzy, jest odczyt linia po linii co jest mi potrzebne więc myślę że będzie ok. Jakby coś to będę jeszczę pisał. Utermiko, bardzo dziękuję za pomoc :thumbsup: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 18 Grudnia 2012 Udostępnij Opublikowano 18 Grudnia 2012 Taka mała poprawka na przyszłość: StreamWriter i StreamReader to klasy. W ogóle cała biblioteka .NET to zbiór klas (tak, nawet zwykłe zmienne typu int (Int32)). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 19 Grudnia 2012 Autor Udostępnij Opublikowano 19 Grudnia 2012 No i mam kolejny problem. Nie działa mi w Visual C++ polecenie fileExists. Błąd to: error C3861: 'fileExists': identifier not found. Ktoś wie o co chodzi i co zrobić? I to samo jest z MessageBox: MessageBox(NULL, "Treść", "Okienko", MB_ICONERROR);. Pokazuje się błąd error C2872: 'MessageBox' : ambiguous symbol ale udało mi się zastąpić to MessageBox::Show. To występuje znowu tylko w Visualu :( Nie wiem czy to znowu coś z tym .NET? EDIT: Już znalazłem... musi być File::Exists(sciezka). Ale czy każde polecenie w C++ musi różnić się w Visualu?? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 19 Grudnia 2012 Udostępnij Opublikowano 19 Grudnia 2012 File::Exists to metoda klasy File z .NET. fileExists to prawdopodobnie z WinAPI. To nie jest wina Visuala, tylko to, że zamiast pisać w C++ to piszesz w C++/CLI (wersji C++ przerobionej aby można było korzystać z .NET). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 19 Grudnia 2012 Autor Udostępnij Opublikowano 19 Grudnia 2012 Chciałem napisać tak jak w WinApi czyli fileExists(sciezka) to zasypał mnie błędami że takie coś nie istnieje (patrz mój poprzedni post)... :( I znów mam problem bo chciałbym zmienić wartość label które znajduje się na formie1 po kliknięciu na przycisk na formie2. Żeby to zrobić dołączyłem plik nagłówkowy "Form1.h" do formy2 a on mi na to: error C1014: too many include files : depth = 1024. Nie wiem czy to ma jakieś znaczenie ale do formy1 dołączam też plik "Form2.h" i tu nie ma problemu ale z tego co mi wiadomo nie działa to w dwie strony. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 19 Grudnia 2012 Udostępnij Opublikowano 19 Grudnia 2012 Skoro chcesz pisać w czystym C++ z WinAPI bez .NET to po prostu przy tworzeniu projektu daj Empty project i robisz co chcesz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Arekadiusz Opublikowano 19 Grudnia 2012 Autor Udostępnij Opublikowano 19 Grudnia 2012 Tylko że jeżeli dam Empty Project to nie będę miał Designera ani nic tylko wszystko trzeba ręcznie pisać :D Ja wolę sobie ustawiać gotowe elementy i mieć z głowy. A co z tym dostępem z formy do formy? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 19 Grudnia 2012 Udostępnij Opublikowano 19 Grudnia 2012 Ale designer jest tylko do .NET. Jeśli chcesz przy tym zostać to poczytaj o C++/CLI, jednak nie radzę bo używanie .NET w C++ jest strasznie przekombinowane. Ewentualnie zainteresuj się innymi bibliotekami GUI typu Qt, wxWidgets. Co do dostępu z formy do formy, to przekaż referencję formy pierwszej do formy drugiej. Np. w konstruktorze drugiej formy przyjmujesz formę pierwszą i w formie pierwszej przekazujesz "this" do konstruktora formy drugiej. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karski1 Opublikowano 17 Stycznia 2013 Udostępnij Opublikowano 17 Stycznia 2013 Visual wymaga dodania specjalnych nagłówków, co nie ma miejsca w przypadku innych kompilatorów. Jednakże jest jednym z lepszych tego typu, szkoda jednak, że nie da się go zintegrować z żadnym GUI. Polecam od siebie CodeLite :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 17 Stycznia 2013 Udostępnij Opublikowano 17 Stycznia 2013 Kodze w visualu od kilku lat, i imo jest najlepszym ide, ponieważ między innymi posiada sprawdzanie składni w czasie rzeczywistym( nigdy więcej nie zapomnisz ; na końcu lini ;P ) dość fajny i rozbudowany debuger, i niewiem o żadnych specjalnych nagłówkach? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 17 Stycznia 2013 Udostępnij Opublikowano 17 Stycznia 2013 Może on nie zaznacza "Empty project" przy tworzeniu projektu lub chodzi mu o redisty. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 17 Stycznia 2013 Udostępnij Opublikowano 17 Stycznia 2013 Ale wystarczy zmienić z flagi /MD na /MT( release ) lub w przypadku debuge /MDd na /MTd Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karski1 Opublikowano 19 Stycznia 2013 Udostępnij Opublikowano 19 Stycznia 2013 Visual 2010 w którym również od czasu do czasu zdarza mi się coś napisać, wymaga dołączania w includach: "stdafx.h" Podczas, gdy inne kompilatory tegoż nie wymagają. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 19 Stycznia 2013 Udostępnij Opublikowano 19 Stycznia 2013 Upewnij się, że wybierasz C++ Win32 (nie CLR) i jak tworzysz projekt to nie klikaj od razu "Finish" tylko daj "Next", zaznacz "Empty project" i dopiero "Finish". Potem prawym na "Source files" > "Add" i dodajesz sobie powiedzmy "main.cpp". Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karski1 Opublikowano 27 Stycznia 2013 Udostępnij Opublikowano 27 Stycznia 2013 Dzięki za cenną poradę! :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się