- GeForce RTX 5050 kártyák az MSI portfóliójából
- Megérkezett a Phanteks új mikrotornya, akár kábeleket rejtő alaplapokhoz is
- Jövőre veti be az FSR 4-et a Sony a PlayStation 5 Pro konzolon
- Angol futball: 30 szezon statisztikáiból gyűjt érdekességeket a Microsoft AI
- Kifarolhat az üvegszubsztrátumok piacáról az Intel
- Bambu Lab 3D nyomtatók
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- Milyen széket vegyek?
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- OLED TV topic
- Vezetékes FEJhallgatók
- Nvidia GPU-k jövője - amit tudni vélünk
- Milyen egeret válasszak?
Aktív témák
-
czappa
aktív tag
Most van időm c, c++t tanulni. El is kezdtem, az első lépés egy egyszerű kliens-server alkalmazás lenne.
Miután megvan a socket foglalás és a bind a szerver oldalon, akkor egy végtelen ciklussal az accept-el várnám a klienseket.
A lényeg, hogy az accept-től visszakapott azonosító egy ún. ClientHandler osztály konstruktorának egyik paramétere. Egy kliensre működik, de nekem majd több klienst kell kezelnem, ezért első lépésben a egy-egy ClientHandler példányt egy set-ben akarok eltárolni.
Az eltárolás még megy, de...
Előbb a kód:server.cpp:
//az összehasonlitas a SET miatt kell, de nekem valójában nem kell a sorrend meghatározása ezért ilyen furcsa a Cmp
class Cmp{
public:
bool operator()(const ClientHandler a, const ClientHandler b)
{
if (&a == &b) return false;
else return true;
}
};
...
cout << "Bind sikeres" << endl;
cout << "Foprogram elott" << endl;
set<ClientHandler, Cmp> clients; //a set
while(1){
listen(foglalat, 1);
meret = sizeof(ugyfel);
//új kliens
uj=accept(foglalat, (struct sockaddr *)&ugyfel, (socklen_t*)&meret);
if (uj<0){
cout << "Accept sikertelen." << endl;
}else{
//az új kliensnek példányosítunk a ClientHandlerből
ch = new ClientHandler(uj, ugyfel);
cout << "Uj kapcsolat... " << endl;
//ezt eltárolom a SET-be
clients.insert(clients.begin(), *ch);
//clients.empty() == true ? cout << "true" : cout<< "false"<<endl;
//ez csak egy példa: törölném a set összes elemét egyesével, de elotte a ClientHandler kiirValamit fv.-ét meghívom
while( !clients.empty() ) {
//ez a hibás sor!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
cout << "Torol: " << (*clients.begin()).kiirValamit() << endl;
clients.erase( clients.begin() );
}
//kilepeunk a vegtelen ciklusbol 1 kliens csatlakozasa utan
break;
}
}
if (close(foglalat) != 0)
cout << "Close sikertelen." << endl;
//delete ch;
return 0;
...
ClientHandler.cpp:
char* ClientHandler::kiirValamit(){
//cout << "kiir baromsagot" << endl;
return "valami";
}A hiba a "cout << "Torol: " << (*clients.begin()).kiirValamit() << endl;" sorral van:
passing ‘const ClientHandler’ as ‘this’ argument of ‘char* ClientHandler::kiirValamit()’ discards qualifiersA hiba üzenet alapján keresgéltem google-n, elvileg az a gond - ha jól értem -, hogy egy const függvényből egy nem const-ot hívok.
Az igaz, hogy ha "char* ClientHandler::kiirValamit() const{" -ot írok, akkor lefordul, de
1) Nem látom, hogy én ezt milyen const függvényből hívom
2) a kiirValamit még lehetne const, de a valódi alkalmazásban nem ezt a próba fv.-t hívnám meg, és a valódi fv.-nek hozzá kell férjen az osztály adattagjaihoz, hogy módosítsa azokat. (erre a "konstans fv." nem képes)A válaszokat előre is köszönöm!
-
czappa
aktív tag
No megoldódott:
A hivatalos Qt tutorialt csinálom és abban az 5. lecke végének hatására egy saját esemény kezelést írtam (signal-slot modell-ben egy gomblenyomás).
Csak annyi volt a gáz, hogy ehhez már kell a Q_OBJECT makró, míg a beépítettekhez nem, így a példában sem szerepelt.
Utána már csak azzal szívtam egy keveset, hogy a KDevelop dist-clean-je mintha nem szedett volna le minden file-t és így újrafordításnál gondok adódtak. -
czappa
aktív tag
Qt-ban akadtam el.
Előbb a kód:#include <QApplication>
#include <QFont>
#include <QLCDNumber>
#include <QPushButton>
#include <QSlider>
#include <QVBoxLayout>
#include <QWidget>class MyWidget : public QWidget
{
public slots:
void button1Clicked();
public:
QSlider *slider;
QPushButton *button1;
QPushButton *quit;
QLCDNumber *lcd;
MyWidget(QWidget *parent = 0);
void init();
};
void MyWidget::button1Clicked(){
slider->setValue(50);
}void MyWidget::init(){
quit = new QPushButton(tr("Quit"));
button1 = new QPushButton(tr("Change"));
quit->setFont(QFont("Times", 18, QFont:: Bold));lcd = new QLCDNumber(2);
lcd->setSegmentStyle(QLCDNumber:: Filled);slider = new QSlider(Qt::Horizontal);
slider->setRange(0, 99);
slider->setValue(0);connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
connect(button1, SIGNAL(clicked()), this, SLOT(button1Clicked()));
connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(quit);
layout->addWidget(lcd);
layout->addWidget(slider);
layout->addWidget(button1);
setLayout(layout);
}MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
init();
}int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget *widget = new MyWidget();
widget->show();
return app.exec();
}A probléma, hogy mikor lefordítom - akár manuálisan, akár Kdevelop-ból - ezt írja:
Object::connect: No such slot QWidget::button1Clicked()Így persze hiába nyomogatom azt a gombot, nem csinál semmit. Próbáltam kiokoskodni a Kdevelop-os példából, de elvileg ugyan úgy csinálom és nem jó. (Gyakorlatilag nyilván elnézek valamit...)
Már azt sem értem, hogy miért a QWidget::button1Clicked() keresi, holott ennek a MyWidget-ben kéne lennie.
Előre is köszi. -
czappa
aktív tag
válasz
Metalwarrior #238 üzenetére
A fork()-kal másolja le magát.
Visszatérési érték:
-ha kisebb mint 0, akkor gebasz történt;
-0: a gyermek process
-nagyobb mint 0: szülő.Alapesetben tehát egy if-fel vizsgálod, h 0, vagy több (vagy kevesebb).
Saját processz azonossítója: getpid(),
Szülőé getppid().
Mindkettőhöz az unistd.h kell.Megj: A fork() a gyermek processz id-vel (pid) vissza, Tehát ha az nagyobb nullánál, akkor vagy a szülő folyamatban és ekkor a visszatérési érték a gyermek pid-je.
mod.:
"Ha lehet kis kommentet is hogy mi mit csinál mert ebből zokni vagyok."A zh-t ne írjuk meg helyetted? Nem nagyon akarlak piszkálni, de neked kell döntened, hogy megakarod-e tanulni, vagy sem. Viszont ha a válasz "sem" nem várd el, hogy más csinálja meg helyetted.
-
czappa
aktív tag
Köszi a válasz!
Azt hiszem értem, de hogy biztos legyek benne összefoglalom:
Az stdlib és a többi a C része (std asszem a standard rövidítése), ha van fönn C fordítom akkor ezek is, ellenben pl. a math függvény gyűjteménynek nem is kell fenn lennie, ezért kell külön jelezzem a fordítónak, hogy keresse meg és linkelje. Mivel ez nem része a C-nek, külön kell linkelni.
Valami ilyesmi ugye? -
czappa
aktív tag
Van egy kérdés, ami régóta foglalkoztat, de nem találtam meg a választ,
pl. ezeket include-oljuk:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>Az első kettővel nincs semmi "gond", viszont at utolsó header file-hoz, hogy használhassam, a linkernek meg kell mondjam, hogy linkelje a math.h-t (már ha jól értem...), így: gcc -lm progi.c
Megtudná nekem valaki mondani, hogy miért van erre szükség? Illetve, hogy az első kettőnél miért nincs?
Előre is köszi. -
czappa
aktív tag
Elkezdtem (volna) telepíteni:
futtatási jog megadása, majd ./bootstrap
Erre ezt írja:
bash: ./bootstrap: /bin/sh^M: bad interpreter: Nincs ilyen fájl vagy könyvtár
Debianos binary meg - már - nincs fenn ezen az oldalon:
[link]
Van ötleted, hogyan telepítsem?
ui.: nem tudom miért rossz a link, idemásolom:
http://wiki.codeblocks.org/index.php?title=Compiled_packages_of_Code::Blocks
[Szerkesztve] -
czappa
aktív tag
Azok segítségét szeretném kérni, akik Anjuta IDE-t haszználnak.
Van 3 fileom:
1)main.c
#include <stdio.h>
#include ''masodik.h''
int main()
{
int c;
c = atlag(2,5);
printf(''%d'',c);
return (0);
}
2)masodik_num.c
#include ''masodik.h''
int atlag(int a, int b){
return ((a + b) / 2 );
}
3)masodik.h
int atlag(int a, int b);
Terminálban tökéletesen le tudom fordítani, gcc -c main.c ill. gcc -c masodik_num.c, majd gcc main.o masodik_num.o parancsokkal; majd a bináris fájlt tudom futattni.
A gond az, hogy Anjuta IDE-ben nem megy. Eleinte mindenféle hibákat írt ki, de guglizással s aptitude-dal való letöltögetéssel előrébb léptem, de még mindig nem jó.
Pontosan ugyan azt írja ki, mintha a fönti terminálos példánál rögtön gcc main.c-vel szerettem volna fordítani:
main.o: In function `main':
/home/czappa/Projects/masodik/src/main.c:10: undefined reference to `atlag'
collect2: ld returned 1 exit status
Gondolom a linkeléssel lehet baj, és biztos be kéne állítanom vmit az anjutában de nem tudom mit.
Nehezíti a helyzetem, hogy bár több programozási nyelvet ismerek (valamennyire...) a c nincs köztük, és linuxszal sem foglalkozom túl rég óta.
A segítségeket előre is köszi.
[Szerkesztve]
Aktív témák
Hirdetés
- Több évig húzódó per várhat az Apple-re az iPhone-ok uralma miatt
- A lapkakészlet és az akku különbözteti meg a Motorola Edge 60 és Edge 60 Pro-t
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Ingatlanos topic!
- Windows 11
- Xbox Series X|S
- Luck Dragon: Asszociációs játék. :)
- iPhone topik
- Tőzsde és gazdaság
- A fociról könnyedén, egy baráti társaságban
- További aktív témák...
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest