zwracanie wartości

zwracanie wartości
0

witam,
Napisałem klasy o podanej hierarchii dziedziczenia: A->B->E
klasy A i B nie mogą tworzyć obiektów. Dopóki Klasa E tworzyła sama pola name i className wszystko działało natomiast zmieniłęm że Klasa E dziedziczy name po A oraz className po B i program się wysypuje. Obiekty klasy liścia zapisuje w wektorze (<vector>). Obiekt jest dodawany normalnie natomiast jeśli próbuje zwrócić nazwę tego obiektu program się wysypuje. Dodam jeszcze, że klasa B dziedziczy wirtualnie po a ponieważ potem mam wielokrotne dziedziczenie po innych klasach.

Kopiuj
 
class Aclass
{
protected:
    string className;
public:
virtual string getClassname();
virtual string getName();
virtual  string getStringToSave();
virtual void setClassName(string AclassName);
virtual void setInfo(string aInfo);
virtual  string getString();
};

class Bclass
: public virtual Aclass
{
protected:
    string name;
    string info;

public:
virtual string getClassname();
virtual string getName();
virtual  string getStringToSave();
virtual void setClassName(string AclassName);
virtual void setInfo(string aInfo);
virtual  string getString();
};

class Eclass
: public Bclass
{
public:
    string getName();
    string getClassname();
    Eclass(string name);
    string getStringToSave();
    void setClassName(string AclassName);
    void setInfo(string aInfo);
    string getString();
};

string Aclass::getString(){};
string Aclass::getStringToSave(){};
void Aclass::setClassName(string AclassName){};
void Aclass::setInfo(string aInfo){};
string Aclass::getName(){};
string Aclass::getClassname(){};


string Bclass::getString(){};
string Bclass::getStringToSave(){};
void Bclass::setClassName(string AclassName){};
void Bclass::setInfo(string aInfo){};
string Bclass::getName(){};
string Bclass::getClassname(){};


Eclass::Eclass(string name)
    {
        setClassName("Eclass");
        this->name = name;
        this->info = "brak informacji";
    }
string Eclass:: getStringToSave()
    {
        return className + "\t" + name + "\t" + info+ "\t";
    }

string Eclass:: getString()
    {
        return "nazwa klasy: " + className +" nazwa: " + name + " info: " + info;
    }
void Eclass::setClassName(string AclassName)
    {
        className=AclassName;
    }
void Eclass::setInfo(string aInfo)
    {
        this->info = aInfo;
    }
string Eclass::getName()
    {
        return this->name;
    }
string Eclass::getClassname()
    {
        return this->className;
    }




0

dodatkowo mam utworzoną klasę P w której mam ten oto właśnie vector do przechowywania tych obiektów. Poza tym wektorem w main mogę tworzyć obiekty normalnie i odczytywać z nich dane natomiast jak dodam je do vector to metody tamtych obiektów zapisanych w vector nie chcą mi zwrócić wartości.

oto jej funkcje

Kopiuj

 void Panelclass:: addObject(string className,string name)
    {
        int classNum = classToNumber(className);
        switch(classNum)
        {
        case 1:{classList.emplace_back(new Eclass(name));break;}
        case 2:{classList.emplace_back(new Fclass(name));break;}
        case 3:{classList.emplace_back(new Gclass(name));break;}
        case 4:{classList.emplace_back(new Jclass(name));break;}
        case 5:{classList.emplace_back(new Kclass(name));break;}
        case 6:{classList.emplace_back(new Iclass(name));break;}
        }

    }


    int Panelclass:: searchObject(string name,string className)                   //szuka obiekt po nazwie i zwraca jego index w classList
    {
        for(int i=0;i<classList.size();i++)
        {
            if(classList[i]->getName()==name&&classList[i]->getClassname()==className)
            {

                return i;
            }
        }
        return -1;
    }


    string Panelclass:: removeObject(string name,string className)                  //usuwa obiekt na podstawie jego nazwy
    {
        int index=searchObject(name,className);
        if(index == -1)
        {
            return "nie ma takiego obiektu";
        }
        classList.erase(classList.begin()+index);
        return "usunieto";
    }

    string Panelclass:: modifyObject(string name,string info,string className)      //otrzymuje nazwe obiektu i zmienia jego informacje
    {
        int index = searchObject(name,className);
        if(index == -1){return "blad";}
        classList[index]->setInfo(info);
        return "zmodyfikowano";
    }
 
0

jak utworzę vector a main i dodam do niego obiekt tą samą metodą to również nie działa. To wina vector? jak można to naprawić? Użycie vector bardzo ułatwiłoby mi w tym przypadku

fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

na pewno nie jest to wina vector.

Dla mnie problemem jest wyjasnienie problemu oraz tona nieczytelnego kodu.

Czytalem to dwa razy i za kazdym razem mialem ochote powiedziec tylko jedno "bierz debugger i sprawdzaj co masz nie tak"

Czy jestes w stanie zadac pytanie w 20 slowach oraz dac kod w max 20 linijkach (ktory jest czytelny) opisujacy Twoj problem?

0

Jestem dopiero początkującym programistą .Przepraszam trochę za haos spróbuje:
mam klasy które wstawiłęm. W klasie PanelClass mam metody służące do zapisywania usuwania oraz edycji vectora classList. W nim przechowuję obiekty klasy E. Dodawanie obiektu do vectora przebiega prawidłowo, natomiast jeśli próbuję się odwołać do metody obiektu zapisanego w nim (np. getString) to program wywołuje funkcje (sprawdzałem) natomiast nie chce mi zwrócić wartości które zawiera obiekt. Dla porównania w main stworzyłem sam obiekt klasy E i próbowałem zrobić to samo i działało.

Dodam jeszcze że na początku klasa E nie dziedziczyła pól po wyższych klasach tylko tworzyła je u siebie i działało wszystko włącznie z operacjami na niej w wektorze w klasie PanelClass.

0

w gruncie rzeczy chodzi mi o to że po dodaniu tego dziedziczonego pola (protected) funkcje z tego obiektu dodane do vectora jakby tracą do niego dostęp. W main natomiast mają go dalej.

Xupicor
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
0

Jak masz zadeklarowany ten vector wskaźników? Bo coś mi wyciekiem pamięci pachnie.

Podałeś to wszystko a nie podałeś jak próbujesz wywoływać te funkcje, ani działającej ani żadnej innej wersji. :P Poza tym, jak sprawdzałeś?


0

Dobra zacznę od początku i postaram się mniej haotycznie. Mam strukturę klas: A->B->E. funkcje deklaruje w klasie A, W poprzedniej wersji pola tworzyłęm prywatnie i tylko w klasie E i wtedy wszystko działało. Teraz pola deklaruję natomiast jedno w klasie A oraz jedno w B oba są typu protected. Klasa E dziedziczy więc 1 pole protected po A 1 pole protected po B oraz metody po A. Obiekty klasy E przechowuję w innej klasie P która ma vector prywatny o nazwie classList oraz metody typu add remove i modify do obsługi obiektów klasy E które są dodawane do tego vectora. Problem pojawia się gdy wywołuję metodę search klasy Panel ponieważ odwołuje się ona do metody getName klasy E. Metoda jest wywoływana bo sprawdzałem, program jednak się wysypuje ponieważ wygląda to tak jakby nie mógł zwrócić pola name które jest dziedziczone prywatnie po klasie A i zmienianie w konstruktorze klasy E na inną wartość. Nie wiem dokłądnie który kawałęk kodu wkleić więc napiszcie co będzie najistotniejsze :)

Xupicor
Przeczytaj mój komentarz jeszcze raz. "bo sprawdzałem" - JAK? Kod podrzuć. :P Kod podrzuć odnośnie tego jak wywołujesz te metody, które "nie działają" Kod podrzuć jak wywołujesz w sposób, który działa. Kodu, kodu i chleba!
0

vector <unique_ptr<Aclass>> classList;

funkcję wywołuje następująco

Kopiuj
    int Panelclass:: searchObject(string name,string className)                   //szuka obiekt po nazwie i zwraca jego index w classList
    {
        for(int i=0;i<classList.size();i++)
        {
            if(classList[i]->getName()==name&&classList[i]->getClassname()==className)
            {

                return i;
            }
        }
        return -1;
    } 

sprawdzałem poprzez dodanie cout przed return this->name;

Kopiuj
 
string Eclass::getClassname()
    {
        return this->className;
    }
0

jak działały wywoływałem je dokładnie tak samo jedyna zmiana w programie to tylko te pola które teraz są dziedziczone po A i B były wtedy tworzone w E:)

Xupicor
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
0

Fiu, przynajmniej unique_ptr masz. To już coś. Ale w takim razie zamiast emplace_back(new Stuff) powinieneś raczej użyć push_back(make_unique<Stuff>(args)). Zaoszczędzi ewentualnego wycieku pamięci.

"Niedziałanie" objawia się błędem w czasie działania programu, tak? No to chyba wiem o co chodzi. ;) (...poczekaj kawalątek)


0

nom dokładnie tak :)

0

oki to czekam :) a jakiej biblioteki muszę użyć do make_unique ?

Xupicor
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
1

Okej, kawa wypita. :P

Skompilowałem sobie Twój kod, uzupełniony o rzeczy konieczne:

Kopiuj
#include <iostream>
#include <string>
#include <memory>
#include <vector>
 
using namespace std;
 
class Aclass
{
protected:
    string className;
public:
virtual string getClassname();
virtual string getName();
virtual  string getStringToSave();
virtual void setClassName(string AclassName);
virtual void setInfo(string aInfo);
virtual  string getString();
};
 
class Bclass
: public virtual Aclass
{
protected:
    string name;
    string info;
 
public:
virtual string getClassname();
virtual string getName();
virtual  string getStringToSave();
virtual void setClassName(string AclassName);
virtual void setInfo(string aInfo);
virtual  string getString();
};
 
class Eclass
: public Bclass
{
public:
    string getName();
    string getClassname();
    Eclass(string name);
    string getStringToSave();
    void setClassName(string AclassName);
    void setInfo(string aInfo);
    string getString();
};
 
string Aclass::getString(){};
string Aclass::getStringToSave(){};
void Aclass::setClassName(string AclassName){};
void Aclass::setInfo(string aInfo){};
string Aclass::getName(){};
string Aclass::getClassname(){};
 
 
string Bclass::getString(){};
string Bclass::getStringToSave(){};
void Bclass::setClassName(string AclassName){};
void Bclass::setInfo(string aInfo){};
string Bclass::getName(){};
string Bclass::getClassname(){};
 
 
Eclass::Eclass(string name)
    {
        setClassName("Eclass");
        this->name = name;
        this->info = "brak informacji";
    }
string Eclass:: getStringToSave()
    {
        return className + "\t" + name + "\t" + info+ "\t";
    }
 
string Eclass:: getString()
    {
        return "nazwa klasy: " + className +" nazwa: " + name + " info: " + info;
    }
void Eclass::setClassName(string AclassName)
    {
        className=AclassName;
    }
void Eclass::setInfo(string aInfo)
    {
        this->info = aInfo;
    }
string Eclass::getName()
    {
        return this->name;
    }
string Eclass::getClassname()
    {
        return this->className;
    }
    
class Panelclass {
public:
    void addObject(string className, string name);
    int searchObject(string name, string className);
    string removeObject(string name, string className);
    string modifyObject(string name,string info,string className);
    int classToNumber(string name) { return 1; }
protected:
    vector <unique_ptr<Aclass>> classList;
};

void Panelclass:: addObject(string className,string name)
    {
        int classNum = classToNumber(className);
        switch(classNum)
        {
        case 1:{classList.emplace_back(new Eclass(name));break;}
        //case 2:{classList.emplace_back(new Fclass(name));break;}
        //case 3:{classList.emplace_back(new Gclass(name));break;}
        //case 4:{classList.emplace_back(new Jclass(name));break;}
        //case 5:{classList.emplace_back(new Kclass(name));break;}
        //case 6:{classList.emplace_back(new Iclass(name));break;}
        }
 
    }
 
 
    int Panelclass:: searchObject(string name,string className)                   //szuka obiekt po nazwie i zwraca jego index w classList
    {
        for(int i=0;i<classList.size();i++)
        {
            if(classList[i]->getName()==name&&classList[i]->getClassname()==className)
            {
                std::cout << "In: " << __PRETTY_FUNCTION__ << "\n" << classList[i]->getString() << "\n";
                return i;
            }
        }
        return -1;
    }
 
 
    string Panelclass:: removeObject(string name,string className)                  //usuwa obiekt na podstawie jego nazwy
    {
        int index=searchObject(name,className);
        if(index == -1)
        {
            return "nie ma takiego obiektu";
        }
        classList.erase(classList.begin()+index);
        return "usunieto";
    }
 
    string Panelclass:: modifyObject(string name,string info,string className)      //otrzymuje nazwe obiektu i zmienia jego informacje
    {
        int index = searchObject(name,className);
        if(index == -1){return "blad";}
        classList[index]->setInfo(info);
        return "zmodyfikowano";
    }
    

int main() {
    Panelclass p;
    string a = "Eclass", b = "bejb";
    p.addObject(a, b);
    std::cout << "found index: `" << p.searchObject(b, a) << "`";
}
 

I wyszło mi:

Kopiuj
$ g++ --pedantic -Wall -Wextra hier.cpp -Wfatal-errors && ./a
hier.cpp: In member function 'virtual std::__cxx11::string Aclass::getString()':
hier.cpp:50:28: warning: no return statement in function returning non-void [-Wreturn-type]
 string Aclass::getString(){};
                            ^
hier.cpp: At global scope:
hier.cpp:50:29: warning: extra ';' [-Wpedantic]
 string Aclass::getString(){};
                             ^
hier.cpp: In member function 'virtual std::__cxx11::string Aclass::getStringToSave()':
hier.cpp:51:34: warning: no return statement in function returning non-void [-Wreturn-type]
 string Aclass::getStringToSave(){};
                                  ^
hier.cpp: At global scope:
hier.cpp:51:35: warning: extra ';' [-Wpedantic]
 string Aclass::getStringToSave(){};
                                   ^
hier.cpp: In member function 'virtual void Aclass::setClassName(std::__cxx11::string)':
hier.cpp:52:34: warning: unused parameter 'AclassName' [-Wunused-parameter]
 void Aclass::setClassName(string AclassName){};
                                  ^~~~~~~~~~
hier.cpp: At global scope:
hier.cpp:52:47: warning: extra ';' [-Wpedantic]
 void Aclass::setClassName(string AclassName){};
                                               ^
hier.cpp: In member function 'virtual void Aclass::setInfo(std::__cxx11::string)':
hier.cpp:53:29: warning: unused parameter 'aInfo' [-Wunused-parameter]
 void Aclass::setInfo(string aInfo){};
                             ^~~~~
hier.cpp: At global scope:
hier.cpp:53:37: warning: extra ';' [-Wpedantic]
 void Aclass::setInfo(string aInfo){};
                                     ^
hier.cpp: In member function 'virtual std::__cxx11::string Aclass::getName()':
hier.cpp:54:26: warning: no return statement in function returning non-void [-Wreturn-type]
 string Aclass::getName(){};
                          ^
hier.cpp: At global scope:
hier.cpp:54:27: warning: extra ';' [-Wpedantic]
 string Aclass::getName(){};
                           ^
hier.cpp: In member function 'virtual std::__cxx11::string Aclass::getClassname()':
hier.cpp:55:31: warning: no return statement in function returning non-void [-Wreturn-type]
 string Aclass::getClassname(){};
                               ^
hier.cpp: At global scope:
hier.cpp:55:32: warning: extra ';' [-Wpedantic]
 string Aclass::getClassname(){};
                                ^
hier.cpp: In member function 'virtual std::__cxx11::string Bclass::getString()':
hier.cpp:58:28: warning: no return statement in function returning non-void [-Wreturn-type]
 string Bclass::getString(){};
                            ^
hier.cpp: At global scope:
hier.cpp:58:29: warning: extra ';' [-Wpedantic]
 string Bclass::getString(){};
                             ^
hier.cpp: In member function 'virtual std::__cxx11::string Bclass::getStringToSave()':
hier.cpp:59:34: warning: no return statement in function returning non-void [-Wreturn-type]
 string Bclass::getStringToSave(){};
                                  ^
hier.cpp: At global scope:
hier.cpp:59:35: warning: extra ';' [-Wpedantic]
 string Bclass::getStringToSave(){};
                                   ^
hier.cpp: In member function 'virtual void Bclass::setClassName(std::__cxx11::string)':
hier.cpp:60:34: warning: unused parameter 'AclassName' [-Wunused-parameter]
 void Bclass::setClassName(string AclassName){};
                                  ^~~~~~~~~~
hier.cpp: At global scope:
hier.cpp:60:47: warning: extra ';' [-Wpedantic]
 void Bclass::setClassName(string AclassName){};
                                               ^
hier.cpp: In member function 'virtual void Bclass::setInfo(std::__cxx11::string)':
hier.cpp:61:29: warning: unused parameter 'aInfo' [-Wunused-parameter]
 void Bclass::setInfo(string aInfo){};
                             ^~~~~
hier.cpp: At global scope:
hier.cpp:61:37: warning: extra ';' [-Wpedantic]
 void Bclass::setInfo(string aInfo){};
                                     ^
hier.cpp: In member function 'virtual std::__cxx11::string Bclass::getName()':
hier.cpp:62:26: warning: no return statement in function returning non-void [-Wreturn-type]
 string Bclass::getName(){};
                          ^
hier.cpp: At global scope:
hier.cpp:62:27: warning: extra ';' [-Wpedantic]
 string Bclass::getName(){};
                           ^
hier.cpp: In member function 'virtual std::__cxx11::string Bclass::getClassname()':
hier.cpp:63:31: warning: no return statement in function returning non-void [-Wreturn-type]
 string Bclass::getClassname(){};
                               ^
hier.cpp: At global scope:
hier.cpp:63:32: warning: extra ';' [-Wpedantic]
 string Bclass::getClassname(){};
                                ^
hier.cpp: In member function 'int Panelclass::classToNumber(std::__cxx11::string)':
hier.cpp:104:30: warning: unused parameter 'name' [-Wunused-parameter]
     int classToNumber(string name) { return 1; }
                              ^~~~
hier.cpp: In member function 'int Panelclass::searchObject(std::__cxx11::string, std::__cxx11::string)': hier.cpp:127:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<classList.size();i++)
                     ~^~~~~~~~~~~~~~~~~
In: int Panelclass::searchObject(std::__cxx11::string, std::__cxx11::string)
nazwa klasy: Eclass nazwa: bejb info: brak informacji
found index: `0` 

No "niby" działa. To jednak nie wiem o co chodzi.
Te warningi to sobie weź do serca. W funkcji zwracającej wartość możesz nie mieć żadnego returna i to się skompiluje (bo i powinno!) - ale jeżeli w trakcie wykonywania kodu kiedykolwiek program znajdzie się w sytuacji, że "kontrola" dojdzie do końca ciała funkcji... To masz Undefined Behavior, demony z nosa, itd.


kq
ale scrollowania było, żeby plusa dać
Xupicor
Hihihi. ^^ Chyba mi ta kawa zaszkodziła, bo się w głos roześmiałem. Aż mi Haskelka z kolan uciekła. (Tak, tak, młoda kotka :P)
0
Kopiuj
classList.push_back(make_unique<Eclass>(name))  

co jest źle w tym zapisie?

0

wielkie dzięki że się tak napracowałeś :) zaraz założe konto tylko po to żeby CI łapkę dać :)

0

czyli tak w sumie to co zmienić w tym kodzie? :)

Xupicor
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
1

A wyszły Ci błędy kompilacji? Jeśli tak - to je wklej, bo w myślach jeszcze nie czytam. :P
Podejrzewać jednak mogę, że Twój kompilator nie kompiluje domyślnie jako C++14, bo wtedy dodano make_unique. Dodaj -std=c++14 do linii kompilacji jeżeli używasz GCC.

Poza tym, to powyżej to takie freebie. Teraz Twoja kolej - obczaj w mojej sygnaturce co to jest SSCCE i się zastosuj. Obetnij wszystko co nie jest konieczne, aż dojdziesz do najmniejszej możliwej formy Twojego programu, która reprezentuje problem. Istnieje spora szansa, że w trakcie znajdziesz nie tylko problem ale i rozwiązanie.

A co zmienić? Że się tak technicznie wyrażę, a pierun go wi. U mnie się przecież nie wywala, więc teraz Twoja kolej - coś musimy robić inaczej, skoro wydaje się działać. Nic ważnego nie zmieniałem przecież, kod masz powyżej. ;)


edytowany 1x, ostatnio: Xupicor
0

tak wyszły jak próbowałem zmienić emplace_back na to co zaleciłeś :/
przed zmianą emplace_back wszytsko się kompilowało i błąd był wyrzucany w trakcie tak jak opisałem :/

Xupicor
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
0

Super, teraz wiem, że masz błędy kompilacji.

...dobrze by było, gdybyś je wkleił, bo jak już wspominałem, w myślach jeszcze nie czytam, a szklana kula akurat u mechanika. :P


0

a u Ciebie działa ok to co mi nie działało?

Xupicor
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
0

Czytaj uważnie. Wkleiłem Ci kod i to jak go skompilowałem i to jak program został uruchomiony. Pod tymi wszystkimi ostrzeżeniami jest to co mi program wypluł:

Kopiuj
In: int Panelclass::searchObject(std::__cxx11::string, std::__cxx11::string)
nazwa klasy: Eclass nazwa: bejb info: brak informacji
found index: `0`  

Czyli searchObject znalazła szukany obiekt, a co za tym idzie - dostęp przez vector zadziałał.

edit:
Czyli dobrze wyczytałem w myślach - w opcjach projektu ("Build options") wybierz C++14 jako standard języka, a jeśli nie ma takiej opcji - dodaj -std=c++14 w dodatkowych opcjach kompilacji ("Other compile options").


edytowany 1x, ostatnio: Xupicor
HE
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:23
0

5a3cc8b588.png

HE
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:23
0

tak właśnie myślałęm tylko wolałem się upewnić. a zobacz jakbyś mógł czy funkcja modyfi Ci działa :)

Xupicor
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
0

Patrząc na kod, pewnie działa. (Ale to, że w parametrach wepchnąłeś info w środek to jakaś pomyłka jest. :P)

Uporasz się z C::B to sam sprawdzisz. ;)


HE
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:23
0

Czyli czekaj bo się zgubiłem :) Mój kod bez znaczących zmian działą u Ciebie? Czy coś (i ewentualnie co :D) zmieniłeś i działą ?

Xupicor
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
0

Po raz kolejny (jejku, jakim ja dzisiaj cierpliwy :P) - wkleiłem Ci kod, który kompilowałem. To jest w przeważającej przerażającej większości Twój kod. (Nie poznajesz? :P) Dodałem nagłówki, "stuba" klasy Panelclass (ugh, dlaczego masz w nazwach klasy słowo "class"? Ty też masz "Heptanczłowiek" w dowodzie? :P) i funkcję main. No i troszeczkę info w metodzie searchObject. A, no i metodę classToNumber - też stub, bo nie mam zamiaru dodawać stupięćdziesięciu klas ABECADŁOclass:P

Porównaj ze swoim projektem - coś musisz robić inaczej niż ja mam w main.

I popraw te warningi. I podnieś sobie poziom ostrzeżeń - najlepiej w opcjach kompilatora dodaj sobie --pedantic -Wall -Wextra, bo kto wie ile jeszcze problemów Ci uciekło.


edytowany 3x, ostatnio: Xupicor
HE
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:23
0

To ja nie wiem :/ Program który wkleiłeś i który u Ciebie działa u mnie tak samo się wysypuje :(

Xupicor
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
0

Jak się wysypuje? Konkretnie. ;)


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)