C/C++

fordításidejű kulcselosztás

Fórumok

Sziasztok!

Azt szeretném elérni, hogy több osztály ugyanazon nevű statikus adattagjának fordítás időben adjunk egymástól diszjunkt értékeket. Tehát :


#include <iostream>

class A { 
  public : static const int MSGID =  ?
};
class B { 
  public : static const int MSGID =  ?
};
class C { 
  public : static const int MSGID =  ?
};

int main()
{
  std::cout << A::MSGID << std::endl;
  std::cout << B::MSGID << std::endl;
  std::cout << C::MSGID << std::endl;
  return 0;
}

Mit javasolnátok a ? helyére, ha a kimenetben pl


1
2
3

-t szeretnék látni?

Vagy másképpen fogalmazva milyen metaprogram ekvivalens a következővel:


int next()
{
  static int cnt = 1;
  return cnt++;
};

class A {  public :  static int MSGID; };
int A::MSGID = next();
...

Nyilván valamiféle

 MSGID = generator< T >::next; 

-ben kell gondolkodni, legalább 1 template paraméter kell.
Természetesen szám paraméterrel meg lehet oldani, de annak nincs értelme, hisz akkor már bele is égethetnénk a kódba az értékeket.

Csak ötleteket várok!

Rendszerhívás elfogás

Fórumok

Sziasztok!

A következő példaprogramot szeretném lefordítani. (Ubuntu 8.10, Netbeans 6.5)

#include <linux/kernel.h>
#include <linux/module.h>
#include <sys/syscall.h>

extern void *sys_call_table[];

asmlinkage int (*eredeti_sys_exit)(int);

asmlinkage int sajat_exit (int error_code) {
printk("Szia! A sys_exit hívásakor ez volt a hibakód: %d\n",error_code);
return eredeti_sys_exit(error_code);
}

int init_module() {
eredeti_sys_exit=sys_call_table[__NR_exit];
sys_call_table[__NR_exit] = sajat_exit;
}

void cleanup_module() {
sys_call_table[__NR_exit] = eredeti_sys_exit;
}

Azonban a következő hibaüzenetet kapom:

gcc -c -g -DMODULE -D__KERNEL__ -DLINUX -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.c
main.c:2:26: warning: linux/module.h: No such file or directory
main.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
main.c:9: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘int’
main.c: In function ‘init_module’:
main.c:15: error: ‘eredeti_sys_exit’ undeclared (first use in this function)
main.c:15: error: (Each undeclared identifier is reported only once
main.c:15: error: for each function it appears in.)
main.c:16: error: ‘sajat_exit’ undeclared (first use in this function)
main.c: In function ‘cleanup_module’:
main.c:20: error: ‘eredeti_sys_exit’ undeclared (first use in this function)
make[2]: *** [build/Debug/GNU-Linux-x86/main.o] Error 1
make[2]: Leaving directory `/home/tom/NetBeansProjects/pelda2'
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/home/tom/NetBeansProjects/pelda2'
make: *** [.build-impl] Error 2

Ha megadom az include pathba "/lib/modules/2.6.27-9-generic/build/include/" elérési utat, továbbra sem hajlandó lefordulni.

gcc -c -g -DMODULE -D__KERNEL__ -DLINUX -I/lib/modules/2.6.27-9-generic/build/include -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.c
/lib/modules/2.6.27-9-generic/build/include/linux/ratelimit.h: In function ‘ratelimit’:
In file included from /lib/modules/2.6.27-9-generic/build/include/linux/kernel.h:18,
from main.c:1:
/lib/modules/2.6.27-9-generic/build/include/linux/ratelimit.h:23: error: ‘CONFIG_HZ’ undeclared (first use in this function)
/lib/modules/2.6.27-9-generic/build/include/linux/ratelimit.h:23: error: (Each undeclared identifier is reported only once
/lib/modules/2.6.27-9-generic/build/include/linux/ratelimit.h:23: error: for each function it appears in.)
/lib/modules/2.6.27-9-generic/build/include/asm/processor.h: At top level:
In file included from /lib/modules/2.6.27-9-generic/build/include/linux/prefetch.h:14,
from /lib/modules/2.6.27-9-generic/build/include/linux/list.h:6,
from /lib/modules/2.6.27-9-generic/build/include/linux/module.h:9,
from main.c:2:
/lib/modules/2.6.27-9-generic/build/include/asm/processor.h:112: error: ‘CONFIG_X86_L1_CACHE_SHIFT’ undeclared here (not in a function)
/lib/modules/2.6.27-9-generic/build/include/asm/processor.h:112: error: requested alignment is not a constant
In file included from /lib/modules/2.6.27-9-generic/build/include/linux/prefetch.h:14,
from /lib/modules/2.6.27-9-generic/build/include/linux/list.h:6,
from /lib/modules/2.6.27-9-generic/build/include/linux/module.h:9,
from main.c:2:
/lib/modules/2.6.27-9-generic/build/include/asm/processor.h:152:1: warning: "cache_line_size" redefined
In file included from /lib/modules/2.6.27-9-generic/build/include/asm/pda.h:7,
from /lib/modules/2.6.27-9-generic/build/include/asm/current.h:19,
from /lib/modules/2.6.27-9-generic/build/include/asm/processor.h:15,
from /lib/modules/2.6.27-9-generic/build/include/linux/prefetch.h:14,
from /lib/modules/2.6.27-9-generic/build/include/linux/list.h:6,
from /lib/modules/2.6.27-9-generic/build/include/linux/module.h:9,
from main.c:2:
/lib/modules/2.6.27-9-generic/build/include/linux/cache.h:64:1: warning: this is the location of the previous definition
/lib/modules/2.6.27-9-generic/build/include/asm/processor.h: In function ‘load_cr3’:
/lib/modules/2.6.27-9-generic/build/include/asm/processor.h:184: error: ‘CONFIG_PAGE_OFFSETUL’ undeclared (first use in this function)
/lib/modules/2.6.27-9-generic/build/include/asm/processor.h: At top level:
/lib/modules/2.6.27-9-generic/build/include/asm/processor.h:233: error: requested alignment is not a constant
/lib/modules/2.6.27-9-generic/build/include/asm/processor.h:270: error: requested alignment is not a constant
/lib/modules/2.6.27-9-generic/build/include/asm/elf.h: In function ‘elf_common_init’:
In file included from /lib/modules/2.6.27-9-generic/build/include/linux/elf.h:7,
from /lib/modules/2.6.27-9-generic/build/include/linux/module.h:14,
from main.c:2:
/lib/modules/2.6.27-9-generic/build/include/asm/elf.h:166: error: ‘struct pt_regs’ has no member named ‘r8’
/lib/modules/2.6.27-9-generic/build/include/asm/elf.h:166: error: ‘struct pt_regs’ has no member named ‘r9’
/lib/modules/2.6.27-9-generic/build/include/asm/elf.h:166: error: ‘struct pt_regs’ has no member named ‘r10’
/lib/modules/2.6.27-9-generic/build/include/asm/elf.h:166: error: ‘struct pt_regs’ has no member named ‘r11’
/lib/modules/2.6.27-9-generic/build/include/asm/elf.h:167: error: ‘struct pt_regs’ has no member named ‘r12’
/lib/modules/2.6.27-9-generic/build/include/asm/elf.h:167: error: ‘struct pt_regs’ has no member named ‘r13’
/lib/modules/2.6.27-9-generic/build/include/asm/elf.h:167: error: ‘struct pt_regs’ has no member named ‘r14’
/lib/modules/2.6.27-9-generic/build/include/asm/elf.h:167: error: ‘struct pt_regs’ has no member named ‘r15’
In file included from /lib/modules/2.6.27-9-generic/build/include/linux/module.h:21,
from main.c:2:
/lib/modules/2.6.27-9-generic/build/include/asm/module.h:70:2: error: #error unknown processor family
make[2]: *** [build/Debug/GNU-Linux-x86/main.o] Error 1
make[2]: Leaving directory `/home/tom/NetBeansProjects/pelda2'
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/home/tom/NetBeansProjects/pelda2'
make: *** [.build-impl] Error 2

Build failed. Exit value 2.

Van valakinek ötlet mivel probálkozzam?

[Megoldva] FFmpeg: Csak a szükséges codec-ek/formátumok regisztrálása

Fórumok

Üdv!

Írtam egy saját C++ libet, ami avi-ba menti a neki átadott képeket.
Ehhez ffmpeg-et használok windowson. Idáig minden működik.

A kapott dll mérete (strip után) 8 Mb amit sokallok.

Jött az ötlet, hogy av_register_all() helyett csak azt regisztrálom ami kell.

Próbálkoztam, a dll kisebb is lett, de a kapott avi képe hibás. Nyilván valamit elrontottam. Tud valaki segíteni?

Konténer: avi
Protokol: file
Codec-ec: raw, mpeg4, mjpeg, theora, h264

Szerk.:
Lemaradt az avcodec_init()...

Gcc fordítási hiba

Fórumok

Sziasztok!

Most tanulom a C-t és egy problémába botlottam, amire nem igazán találok megoldást.
sin, cos függvényt szerettem volna használni, a math.h-t include-oltam is.
A fordító ezt a hibaüzenetet dobja:

temp.c: In function ‘main’:
temp.c:5: warning: return type of ‘main’ is not ‘int’
/tmp/ccichMKA.o: In function `main':
temp.c:(.text+0x66): undefined reference to `sin'
collect2: ld returned 1 exit status

Biztos, hogy nem a forráskód a rossz, mert kipróbáltam egy neten találtal is,
és ugyan ez a probléma a sin, cos függvénnyel.
Mitől lehet ez?

[Megoldva] Qt4 RegExp kifejezési probléma

Fórumok

Sziasztok!

A Qt4-ben található kis syntaxhighlighter példa programmal küzdök. Az a gondom, hogy a megjegyzéseket és az idézőjelben lévő dolgokat néha összekeveri.

A program ezen része így néz ki:


	singleLineCommentFormat.setForeground(Qt::red);
	rule.pattern = QRegExp("//[^\n]*");
	rule.format = singleLineCommentFormat;
	highlightingRules.append(rule);

	multiLineCommentFormat.setForeground(Qt::red);

	quotationFormat.setForeground(Qt::darkGreen);
	rule.pattern = QRegExp("\".*\"");
	rule.format = quotationFormat;
	highlightingRules.append(rule);

Az első RegExp kifejezés arról szól, hogy mit tekintsen egy sorban lévő // megjegyzésnek, a második pedig azt, hogy mit tekintsen idézőjelek közti kifejezésnek.
Nagyjából jól is működik, de ha a programot saját magára eresztem rá, azaz ezt a C++ fájt nyitom meg, amiben ez a rész van, akkor az első RegExp kifejezés nem jelenik meg helyesen.

Ez zöld lesz: "//[^\n]*"
Ez pedig piros: );

Tehát az idéző jelek közti rész helyesen zöld lesz, de a ); résznek nem kellene pirosnak lennie, hiszen nincs a sorban megjegyzés. Habár az idézőjelek közt valóban ott szerepel a kettős perjel //.

A lényeg, hogy egy olyan RegExp kifejezésre lenne szükségem a megjegyzés érzékelésnél, ami észreveszi, hogy a kettős perjel idézőjelek közt szerepel, ezért nem kell vele foglalkozni.

Van valakinek ötlete, mit lehetne megadni?

Willem programmer ujraforditasa Borland C++ 6.0 alatt (windows)

Fórumok

Sziasztok!
A Willem programmerhez tartozo eprom4.5-ot szeretnem ujraforgatni Windows ala, mivel a laptopon nincs parhuzamos port, es a moschip PCMCIA lpt porton nem a szokasos porton figyel az LPT1. Atirni nem tudtam a windowsban, igy marad az ujraforgatas.
Van valakinek elfekvoben egy Borland C++ builder 6.0, amit felhasznalhatok?

Udvozlettel:
Gyuri

[megoldva]string find substr-hogy is van ez pontosan?

Fórumok

Sziasztok!
Van egy stringem mondjuke ez:


string szabaly="SaCSaABeEAbBCcBCvCAcABaB"

ebben szeretném én megkeresni mondjuk a 'c'-ket, úgy, hogy előszőr megkapom az első 'c'-indexét majd a másodikét, és így tovább, amig van c a stringben, és ha már nincs, azt is meg tudjam állapítani...

Én eddig így akartam, de ez pl a 'c'-re először kiad 13-at, azután pedig mindíg 19-et, holott én azt várnám hogy 13,19,4294967295-öt ad vissza(4294967295-öt szokta visszaadni a findra, ha nem talál valamit)...


iterator=szabaly.substr(iterator+1).find('c')+iterator+1; //amikor ideérek, akkor az iterátorom már az első c-betűn áll

Szóval valakinek valamilyen ötlet arra, hogy hogy oldjam meg a problémám?
Köszönöm: Kolos

FFMpeg video encoding

Fórumok

Webcam képét szeretném lementeni, jelenleg Win alatt. Az ffmpeg jó választásnak tűnt. Sajnos túl sok leírást nem találtam (ami van az is inkább lejátszásról szól).

Az ffmpeg forrásában van egy output_example.c, ami majdnem jó, leszámítva, hogy fix fps-sel menti a videót ami nekem nem jó, mert a webcam nem ilyen.

A kérdés az, hogy hogyan lehet nem fix fps-sel menteni ffmpeggel, és hogy egyáltalán milyen formátumok támogatják...

QTableView

Fórumok

Sziasztok!

Van egy pici gondom, remelem valaki mar talalkozott ilyesmivel. QT4-ben kell irnom most programot es van egy olyan keres, hogy a QTableView -ben megjelenitett adatot szerkeszteni kell. Ezt ugy-e a jo oreg QTableView->edit() metodusal szepen meg is lehet oldani. A problemam az, hogy az egyik mezot legordulo gomb (combo box) segitsegevel kellene megvalositsam, otletem sincs hogy ezt hogyan lehet definialni. Valakinek valami otlet?

Elore is koszi,
bzg