e5500 Temat założony przez niniejszego użytkownika |
Rozdział 28 - osadzenie funkcji wewnątrz innej funkcji » 2017-02-23 02:53:15 Witam! Rozwiązałem zadanie po rozdziale 28 i spostrzegłem, że struktura napisanego kodu aż prosi się o wykorzystanie funkcji. Kod przedstawia się tak: #include <iostream> #include <string>
std::string konwertuj( std::string & sTekst ) { std::string sWynik = sTekst; size_t znalezionaPozycja = sWynik.find( " " ); do { sWynik.erase( znalezionaPozycja, 1 ); znalezionaPozycja = sWynik.find( " ", znalezionaPozycja ); } while( znalezionaPozycja != std::string::npos ); znalezionaPozycja = sWynik.find( "<" ); do { sWynik.erase( znalezionaPozycja, 1 ); sWynik.insert( znalezionaPozycja, "[" ); znalezionaPozycja = sWynik.find( "<", znalezionaPozycja ); } while( znalezionaPozycja != std::string::npos ); znalezionaPozycja = sWynik.find( ">" ); do { sWynik.erase( znalezionaPozycja, 1 ); sWynik.insert( znalezionaPozycja, "]" ); znalezionaPozycja = sWynik.find( ">", znalezionaPozycja ); } while( znalezionaPozycja != std::string::npos ); return sWynik; }
int main() { std::string tekst = "<b>to jest </b> testowy napis <b>:)"; std::cout << tekst << std::endl; std::cout << konwertuj( tekst ) << std::endl; return 0; }
Jednakże nie jestem w stanie (co jest w pełni zrozumiałe) uzyskać komunikacji między funkcją konwertuj, a hipotetycznie napisaną funkcją zamień. Kompilator wyświetla błąd informujący, że funkcja nie została zadeklarowana w danym zakresie. Co powinienem zrobić? Wpisać ją na "wewnątrz" funkcji konwertuj? |
|
carlosmay |
» 2017-02-23 06:02:56 Wklej kod, którego dotyczy problem. Jeśli kompilator mówi, że funkcja jest niezadeklarowana, to tak jest (przynajmniej w miejscu, w którym chcesz użyć tej funkcji). Wszystko czego chcesz użyć musi być już znane w miejscu użycia. |
|
pekfos |
» 2017-02-23 11:10:16 Jednakże nie jestem w stanie (co jest w pełni zrozumiałe) uzyskać komunikacji między funkcją konwertuj |
??? Czyli jest w pełni zrozumiałe dla ciebie, dlaczego nie możesz tego zrobić? Po co wtedy ten temat..? funkcja nie została zadeklarowana w danym zakresie. Co powinienem zrobić? Wpisać ją na "wewnątrz" funkcji konwertuj? |
To że nie ma funkcji w danym zakresie, nie znaczy, że masz ją wpisać do dokładnie tego zakresu, tj zakresu widoczności nazw funkcji konwertuj(). Nazwy pojawiają się i znikają wraz z analizowaniem kodu od góry do dołu. Jeśli coś jest niezadeklarowane, to znaczy że kompilator o tym jeszcze nie słyszał, idąc od góry do dołu, i widząc użycie tej nazwy, nie ma pojęcia co z tym zrobić. |
|
latajacaryba |
» 2017-02-23 13:33:12 Moi przedmówcy już Ci odpowiedzieli, ale ja tylko dodam, że: Wpisać ją na "wewnątrz" funkcji konwertuj? |
Nie można definiować jednej funkcji wewnątrz drugiej jeśli o to Ci chodziło. |
|
e5500 Temat założony przez niniejszego użytkownika |
» 2017-02-23 15:10:18 Wpis pekfos nakierował mnie na właściwi błąd. Funkcję zamien definiowałem po funkcji konwertuj i dlatego była ona "not declared in this scope". Udało mi się znaleźć prawidłowe rozwiązanie. Oto ono: #include <iostream> #include <string>
std::string zamien( std::string & sTekst, std::string szukanySymbol, std::string wpisywanySymbol ) { size_t znalezionaPozycja = sTekst.find( szukanySymbol ); do { sTekst.erase( znalezionaPozycja, 1 ); sTekst.insert( znalezionaPozycja, wpisywanySymbol ); znalezionaPozycja = sTekst.find( szukanySymbol, znalezionaPozycja ); } while( znalezionaPozycja != std::string::npos ); return sTekst; }
std::string konwertuj( std::string & sTekst ) { zamien( sTekst, "<", "[" ); zamien( sTekst, ">", "]" ); size_t znalezionaPozycja = sTekst.find( " " ); do { sTekst.erase( znalezionaPozycja, 1 ); znalezionaPozycja = sTekst.find( " ", znalezionaPozycja ); } while( znalezionaPozycja != std::string::npos ); return sTekst; }
int main() { std::string tekst = "<b>to jest </b> testowy napis <b>:)"; std::cout << tekst << std::endl; std::cout << konwertuj( tekst ) << std::endl; return 0; }
Wszystkim serdecznie dziękuję :) |
|
« 1 » |