C/C++

vector elemének sorszáma

Fórumok

Üdvözletem!

Rákerestem a vector és vektor szavakra a C++ fórumtémák között, de nem leltem okosságot.

Az alábbi kódrészletecskével gondoltam ismerkedni a vektorokkal:


#include <vector>

using std::vector;
using std::cin;
using std::cout;
using std::endl;
// tom, h. using namespace std; rovidebb lenne.

int main()
{

vector <int> ENVEKTOROM;

ENVEKTOROM.push_back(100);
ENVEKTOROM.push_back(200);
ENVEKTOROM.push_back(300);


for (vector<int>::iterator VEKTOR_ELEM_MUTATO = ENVEKTOROM.begin(); VEKTOR_ELEM_MUTATO != ENVEKTOROM.end(); VEKTOR_ELEM_MUTATO++)
    {
    cout << *VEKTOR_ELEM_MUTATO << endl;
    }

}

Ezzel a három egészt tartalmazó vektotom elemeit elegánsan megjelenítem a képernyőn:
100
200
300

Ez ok. De mi van, ha az elemek sorszámát is ki akarom íratni így:
1. 100
2. 200
3. 300
netán így:
0. 100
1. 200
2. 300

Csak ennyire átalakítva sikerült megoldani, de van jobb megoldás, ahol a fentit nem kell ennyire átírni? Netán egy függvény, vagy mutató ami erre jó lenne?
(Vektor osztály tagja, amivel egyszerűbben meg lehet csinálni az első példát egy picit kibővítve?

Átalakított változat:


#include <vector>

using std::vector;
using std::cin;
using std::cout;
using std::endl;
// tom, h. using namespace std; rovidebb lenne.

int main()
{

vector <int> ENVEKTOROM;

ENVEKTOROM.push_back(100);
ENVEKTOROM.push_back(200);
ENVEKTOROM.push_back(300);


for (int index=0; index < ENVEKTOROM.size(); index++)
    {
    cout << index + 1 << ". " << ENVEKTOROM.at(index) << endl;
    }

}

Objectumok ciklussal

Fórumok

Sziasztok!

Lenne egy kis problemam az objectumok letrehozasaval. Futasi idoben kellene oket letrehozni, es nem tudni elore hany lesz beloluk. Lenyeg, hogy lenne ket valtozo, amiknek az erteke ciklusonket valtozik es nem szam, hanem string tipusuak.

Manualissan letrehozva igy nez ki:

Building *bighouse = new Building(Building::Model_1, this);
bighouse->setSize(X, Y);

Amit valtozobol kellene letrehozni az a bighouse es a Model_1
Tehat:

Building *valtozo1 = new Building(Building::valtozo2, this);
valtozo1->setSize(X, Y);

Sajnos fogalmam sincs, hogy lehetne ezekre a helyekre a valtozok erteket beilleszteni.
A segitseget elore is koszonom!

Video és hanganyagok hossza (GStreamer)

Fórumok

Sziasztok!

Videók és hangfelvételek hosszát szeretném megállapítani. Ezt a GStreamer segítségével próbálom megoldani.
A dokumentációban található "Hello world" lejátssza a paraméterül kapott fájlt (http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/ch…). Próbaképpen ennek a fájlnak a hosszát akartam kiíratni. Erre ezt találtam: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/ch….

A "Hello world"-be a következő sorokat írtam:


GstFormat fmt = GST_FORMAT_TIME;
gint64 len;
	
if(gst_element_query_duration(pipeline, &fmt, &len))
	g_print("Time: %" GST_TIME_FORMAT, GST_TIME_ARGS (len));
else
	g_print("hiba\n");

A probléma az, hogy a gst_element_query_duration() fv. hamis értékkel tér vissza.
Több helyre is beszúrtam a kódrészletet, de semmi változás.

Van javaslatotok a probléma megoldására?
Előre is köszönöm a válaszokat.

clipboardról kellene a kép borlandC-ben.

Fórumok

Sziasztok.

Már egy jó ideje küzdök a delphi5, a borland C "tbitmap"jával. Amivel az a baj, hogy a 10 évvel ezelőtti verzióval nem kompatibilis az új (amit nem igazán értek mindek kell fileformátumot változtatni, miért nem lett pl Tbitmap2 vagy mittudom én), Na mindegy. Az én tudásommal ez megoldhatatlan. Ugyhogy eszembejutott egy rendkívül nem elegáns, de praktikus gyorsan eredményt adó megoldás. Tud a delphi Clipboardra menteni. Na ezt a clipboardot hogy tudom olvasni Borland C++-al, és berántani Tbitmapba. Vadásztam én a googleban de a borland c++/C/Cpp Clipboard Tbitmap kombók kicsit tág találatot adnak.

[Megoldva:] Qt4: Child widgetek visszanyerése

Fórumok

Sziasztok!

Van három QFrame objektumom egy MyDialog objektumon belül. Ezeken belül vannak QRadioButton objektumok és egy QLineEdit objektum. Egy a QFrame-t szertnék átadni egy eljárásnak, aminek ki kellene derítenie a QFrame-en belüli információkat. Tehát meg kellene tudnia határoznia a RadioButton-ok állapotát, és hogy mi szerepel a LineEdit-ben. Mind a három Frame objektum teljesen ugyanolyan felépítésű, tehát bármelyiket is kapja meg a függvény, ugyanazt kell csinálnia. Ugyanakkor a függvény nem látja a Frame-en belüli objektumokat közvetlenül, csak azt tudja, hogyan kell felépülnie a Frame-nek.

Előre is kösz!

[Megoldva:] Qt4: Mikor kell delete?

Fórumok

Sziasztok!

Két kérdésem is lenne a dologgal kapcsolatban. Mivel nagyon szorosan összefügg a két kérdés, ezért úgy gondolom nem kell külön topic-ban indítani. Fontos figyelembe venni, hogy Qt4 programozási problémáról van szó!!! (Nem sima C++. Éppen ezért nem vagyok biztos a dolgomban.)

1) Először is van egy saját osztályom, ami nem QWidget-ből, hanem QObject-ből származik. Ennek van két dinamikus adattagja, amelyek szintén nem widget-ek, tehát nem lesz köztük olyan szülő-gyermek viszony, mint amikor egy widget tartalmaz egy másik widget-et. (pl. amikor egy QDialog objektum tartalmaz egy QLabel-t.). A kérdés, hogy meg kell-e írni ilyenkor a destruktor függvényt vagy sem?
Az én estem valahogy így néz ki:


// a header file:

#include <QObject>

class QFile;

class MyClass : public QObject {
    Q_OBJECT
public:
    MyClass(const QString& inFilePath, const QString& outFilePath);
    void doIt();
private:
    QFile* inFile;
    QFile* outFile;
};

//-----------------------------------------------------------------------
// a cpp fájl:

#include "myclass.h"

MyClass::MyClass(const QString& inFilePath,	const QString& outFilePath) : QObject() {
	inFile  = new QFile(inFilePath);
	outFile = new QFile(outFilePath);
}

void MyClass::doIt() {
  // csinál valamit.
}

Tehát az első kérdés, hogy meg kell-e írnom ilyen esetben a destruktor függvényt is vagy el lehet hagyni? Ami valahogy így nézne ki:


MyClass::~MyClass() {
  delete inFile;
  delete outFile;
}

2) Ha a fő programomban, ami egy dialógus ablak, és egy "Start" gomb hatására létrehozok egy ilyen saját osztálybeli objektumot, akkor ezt szükséges-e a használat után delete-vel törölni a memóriából?


void MyDialog::start() {
  QString inPath;
  QString outPath;

  // egyéb részek

  MyClass* mc = new MyClass(inPath, outPath);
  mc->doIt();
  delete mc;
}

Tehát a kérdés, hogy kell-e a "delete mc;" vagy sem?

Nekem mindkét esetben az az érzésem, hogy kellenek a kérdéses dolgok. (Az első esetben a destruktor a másodikban a delete.) Azért gondolom, mert nem widget-ekről van szó, ahol a szülő widget képes felszabadítani a gyermek widget-et.

Várom válaszotokat. Kösz!

[Megoldva:] Függvény átadása paraméterként

Fórumok

Sziasztok!

Írok egy progit, amiben azt vettem észre, hogy nagyon sok teljesen hasonló függvényt kellett írnom. Ezeken a hasonló függvényeken belül csak kis részletek térnek el. Nagyjából így néznek ki:


void fv1(...) {
  // fájl beolvasás soronként

  // a sor manipulálása 1

  // kiírás új fájlba
}

void fv2(...) {
  // fájl beolvasás soronként

  // a sor manipulálása 2

  // kiírás új fájlba
}

void fv3(...) {
  // fájl beolvasás soronként

  // a sor manipulálása 3

  // kiírás új fájlba
}

// stb...

Nyilvánvaló, hogy sokkal jobb lenne, ha csak a manipulálás függvényeket írnám meg külön-külön, és a fv1(), fv2() ... fvX() helyett, csak egy fvGeneral() lenne, aminek az egyik paramétere egy manipulal() függvény lenne. És ezek után a függvények listája a következőképpen nézhetne ki:


void fvGeneral(..., FunctionType manipulal(...)) {
  // fájl beolvasás soronként

  outString = manipulal(...);

  // "outString" kiírása új fájlba
}

std::string manipulal1(std::string in) {
  std::string out;
  // "in" string manipulációja
  return out;
}

std::string manipulal2(std::string in) {
  std::string out;
  // "in" string manipulációja
  return out;
}

std::string manipulal3(std::string in) {
  std::string out;
  // "in" string manipulációja
  return out;
}

int main() {
  // a fő program egyéb részei

  fvGeneral(..., manipulal1());
  fvGeneral(..., manipulal2());
  fvGeneral(..., manipulal3());
}

Előre is köszönöm a segítséget!

gdb print reverse order. Miért?

Fórumok

Sziasztok!

Miért reverse order kiíratásnál (gdb) a változóm értéke (bináris)?
A control[fd].buf (char buf[1024]) változóban bináris adatok vannak. A 2-10. byteig található benne egy unix timestamp.

Namost az értéke "00 00 01 13 FC 20 8D FF".

Átmásolom buf-ból unsigned long long timestamp-ba:

memcpy(&control[fd].timestamp, (control[fd].buf+2), 8);

majd gdb-vel kiiratva:

---
522 memcpy(&control[fd].longitude, (control[fd].buf+10), 4);
(gdb) p control[fd].timestamp
$94 = 18414410718410506240
---
18414410718410506240 = FF8D20FC13010000 ami ugye pont a reverse order byteonként mint ami nekem kellene.

Miért van megfordítva? Vagy csak a gdb csinálja?
---
(gdb) p &control[fd].timestamp
$88 = (long long unsigned int *) 0xb799bf08
(gdb) dump binary memory /tmp/proba4.dump 0xb799bf08 0xb799bf08+8
---
Fileba kiírva stimmel és nincs megfordítva.
Szóval hogy van ez?

Van egy 32-bites .o fileom, szeretnek egy 64-est ...

Fórumok

A probléma az alábbi: Van egy 32 bites .o fileom. Tudom a benne szereplő függvények szignatúráját (megvan a .h file hozzá).

Van egy programom, ami 64 bites, és nem akarom az egészet újraforditani (a libekkel együtt) 32-re, de össze akarom linkelni a .o filelal, hogy használhassam a .o fileban lévő függvényt.

Megoldható ez valahogy?

Wrappelhető a .o?

Ötletek?

[megoldva]printf+végtelen ciklus+gcc hiba?

Fórumok

Sziasztok.Valamiért furcsán fordul le egy programom.Itt van a linkje:http://www.hup.pastebin.com/m2a351cbc

Ha benn van a while (1){} rész,akkor nem ír ki az előtte lévő printf sem.Pedig szerintem kellene.Ez is csak nálam bugos,vagy másnál is hasonló a helyzet?

gcc tulajdonságai:
gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)