Boost - programy się wyłączają

Boost - programy się wyłączają
M2
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:11
0

Witam,

Korzystam z Dev C++ w wersji 4.9.9.2. Przy pomocy WebUpdate'era pobrałem i zainstalowałem boost w wersji 1.46.0. Do wiersza poleceń konsolidatora wpisałem "-lboost_regex". Przykladowy program:

Kopiuj
#include <iostream>
#include <string>
#include "boost/regex.hpp"
int main()
{
    boost::regex phoneRegex= boost::regex("[1-9][0-9]-[1-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]");
    std::string data;
    std::cout << "Wprowadz telefon (xx-xxx-xx-xx): ";
    getline( std::cin, data );
    while ( !( boost::regex_match( data, phoneRegex ) ) )
    {
          std::cout << "Ba!d." << std::endl;
          std::cout << "Wprowadz telefon: ";
          getline( std::cin, data );
          }
    std::cout << data << std::endl;
    return 0;
}

się kompiluje, jednak program po uruchomieniu się zawiesza. Co może być tego przyczyną?

edytowany 1x, ostatnio: mtm2
n0name_l
"Korzystam z Dev C++ w wersji 4.9.9.2", a uzywasz liczydla zamiast kalkulatora ? :)
LN
  • Rejestracja:około 16 lat
  • Ostatnio:około rok
  • Postów:1398
2

Przyczyną jest używanie tak archaicznego "narzędzia", jak Dev-c++. Zainstaluj coś normalnego - Code::Blocks albo Eclipse CDT. Wtedy pogadamy :)

M2
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:11
0

Przyzwyczajenie straszna rzecz ;)
Zanistalowalem code:blocks z MinGW i najpierw pytanie takie ogólno-konfiguracyjne:
W "Settings" -> "Compiler and debbuger", zakładka "Toolchain executables" jezeli jako scieżkę ustawię "C:\Dev-Cpp" to przykładowy program kompiluje sie bez problemu:

Kopiuj
#include<iostream>

using namespace std;

int main(int argc, char* argv[])
{
    int n = atoi(argv[1]);
    cout << "Hello world!" << RAND_MAX << " " << n << endl;
    getchar();
    return 0;
}

A jeżeli ustawie nowo zainstalowanego MinGW scieżką "C:\Program Files (x86)\CodeBlocks\MinGW" to wtedy kompilator sie pluje, ze nie zna stałej RAND_MAX, funkcji atoi i getchar, i wtedy muszę dodać biblioteki cstdio i stdlib.h. Czym ta różnica jest spowodowana? Byłem przyzwyczajony, że większość "standardowych" rzeczy znajduje się już w iostream.

Czy to wszystko jeżeli chodzi o wstępną instalację i konfigurację C::B? Czy coś jeszcze?

I jeszcze jedno pytanie: Od czego zależy wielkość stałej RAND_MAX? Innymi słowy: dlaczego ja mam ją równą 32767 a inni mają bodajże 2^31-1?

edytowany 2x, ostatnio: mtm2
no_solution_found
iostream czyli InOut Stream - strumień wejścia wyjścia, tam nie ma żadnych funkcji matematycznych. Dlaczego pod Devem Ci to działa? Bo to prastare IDE z jeszcze bardziej archaicznym kompilatorem.
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
2

W C++ jest bardzo wazne dolaczanie naglowkow i trzeba to po prostu robic, w C czy w innych prastarych wynalazkach typu Dev-C++ mogles sobie to darowac bo kompilator "znajdywal" odpowiednie funkcje/zmienne. Co do konfiguracji to w sumie nigdy jakos specjalnie nie konfigurowalem nic poza wygladem tego C::B. Polecilbym Ci jeszcze dodac sobie flagi -Wall, -pedantic, zeby Ci drukowala wszystkie ostrzezenia, na poczatku przydatna rzecz.

edytowany 1x, ostatnio: n0name_l
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
1
mtm2 napisał(a):

kompilator sie pluje, ze nie zna stałej RAND_MAX, funkcji atoi i getchar, i wtedy muszę dodać biblioteki cstdio i stdlib.h. Czym ta różnica jest spowodowana? Byłem przyzwyczajony, że większość "standardowych" rzeczy znajduje się już w iostream.

Różnica jest spowodowana tym, że standard pozostawia pewną dowolność. Nie mówi on "atoi możesz używać wtedy i tylko wtedy jeśli zaincludujesz <cstdlib>" tylko "jeśli zaincludujesz <cstdlib> na pewno będziesz mógł używać atoi". Czyli dana inmplementacja bibliotek standardowej ma ci udostępnić to, co gwarantuje standard lub więcej. Ty polegałeś na tym niestandardowym "więcej" no i zemściło się.

mtm2 napisał(a):

Od czego zależy wielkość stałej RAND_MAX? Innymi słowy: dlaczego ja mam ją równą 32767 a inni mają bodajże 2^31-1?
Zależy to od twórców implementacji standardu C++. Standard nie określa ile to ma być. Dlatego każda implementacja definiuje RAND_MAX na swój sposób.

_13th_Dragon
Standard określa minimalny zakres tej wartości.
M2
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:11
0

Ok, a teraz instalacja boosta. Korzystałem z tej instrukcji: http://wiki.codeblocks.org/index.php?title=BoostWindowsQuickRef.
Pobrałem boost_1_47_0.zip i boost-jam-3.1.18-1-ntx86.zip wypakowałem oba archiwa do C:\boost.
Do zmiennej systemowej PATH dodałem C:\Program Files (x86)\CodeBlocks\MinGW\bin i zrestartowałem system.
Po wypakowaniu w konsoli wykonałem:
set PATH=C:\boost\boost-jam-3.1.18-1-ntx86;%PATH%
A nastepnie przeszedłem do kalatogu z boostem:
cd /D C:\boost\boost_1_47_0
I Wpisalem:
bjam --toolset=gcc "--prefix=C:\Program Files (x86)\CodeBlocks" install

I wypluło mi cos takiego:

Kopiuj
C:\boost\boost_1_47_0>bjam --toolset=gcc "--prefix=C:\Program Files (x86)\CodeBloc
ks" install
warning: mismatched versions of Boost.Build engine and core
warning: Boost.Build engine (bjam) is 03.1.17
warning: Boost.Build core (at C:/boost/boost_1_47_0/tools/build/v2) is 2011.04-svn

C:/boost/boost_1_47_0/tools/build/v2/util\path.jam:476: in path.makedirs
rule MAKEDIR unknown in module path.
C:/boost/boost_1_47_0/tools/build/v2/build\configure.jam:190: in configure.set-log
-file
C:/boost/boost_1_47_0/tools/build/v2\build-system.jam:725: in load
C:\boost\boost_1_47_0\tools\build\v2/kernel\modules.jam:283: in import
C:\boost\boost_1_47_0\tools\build\v2\kernel\bootstrap.jam:142: in boost-build
C:\boost\boost_1_47_0\boost-build.jam:17: in module scope

C:\boost\boost_1_47_0> 

W instrukcji napisane jest ze "This step will generally take 5-20 minutes, depending on the capabilities of your PC. " a u mnie trwało to moment. Wszystko jest ok? Co oznaczają te ostrzezenia?

Edit: Wykonalem najpierw "bootstrap.bat gcc" a nastepnie ponowilem powyzsze polecenie i "coś się dzieje".Zobaczymy ;)

edytowany 2x, ostatnio: mtm2
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
1

Ja bym się raczej tym martwił:

rule MAKEDIR unknown in module path
Wklep w googla, coś podpowie.

M2
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:11
0

Dziękuje za pomoc :) Program działa, ale jedna rzecz mi się nie podoba:

W "Compiler and debugger settings", w zakładce "Search directories" dodałem C:\boost\boost_1_47_0 i wtedy jest ok bo w C:\boost\boost_1_47_0\boost siedzą wszystkie pliki nagłówkowe, więc dorzucanie #include<boost/regex.hpp> ma sens.
Dlaczego analogicznie dorzucenie katalogu C:\boost\boost_1_47_0\bin.v2\libs do linkera nie wystarczy?

Inaczej: W "linker settings" musiałem ręcznie dodać plik C:\boost\boost_1_47_0\bin.v2\libs\regex\build\gcc-mingw-4.4.1\debug\link-static\threading-multi\libboost_regex-mgw44-mt-d-1_47.a i dopiero wtedy program się skompilował.

Rozwiązanie mało wygodne, bo wychodzi że dla każdej podbiblioteki z boosta będę musiał pamiętać o dodaniu pliku *.a do linkera. Jak je dodać za jednym zamachem?

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
1

Tak to działa.
Dodanie ścieżki include'ów nie powoduje automatycznego include'owania wszystkich plików nagłówkowych. Tak samo dodanie ścieżki lib'ów nie powinno powodować automatycznego linkowania ze wszystkimi lib'ami.

M2
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:11
0

Ok, dziekuję ;). Tylko jaki wtedy ma sens dodawanie folderu do Linkera? (folder z libami)

To teraz już ostatnie pytanie, z ciekawości: Jaka może być przyczyna tego, że pliki wykonywalne exe po przekompilowaniu kodu w Code:Blocks stają się dość większe? Z pliku exe ważącego ~600 KB i stworzonego w Devie zrobiło się ~900 KB.

edytowany 1x, ostatnio: mtm2
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)