Diskuze: Pouziti externich datovych typu v .h ?

C++ C a C++ Pouziti externich datovych typu v .h ?

Avatar
Xin_
Člen
Avatar
Xin_:

Zdravím,
jde, popř. jak použít "cizí" datové typy ve vlastním .h ?

mám něco na tento způsob

_CHAR_INFO getScreen();

ale pořád to hází chyby

Chyba   9       error C2146: syntax error : missing ';' before identifier 'getScreen'   c:\users\patrik\documents\visual studio 2013\projects\dynamiclist\dynamiclist\interface.h       69      1       DynamicList
Chyba   10      error C4430: missing type specifier - int assumed. Note: C++ does not support default-int       c:\users\patrik\documents\visual studio 2013\projects\dynamiclist\dynamiclist\interface.h       69      1       DynamicList
Odpovědět 8.2.2015 13:28
Zvědavost nás žene vpřed :)
Avatar
David.Landa
Člen
Avatar
David.Landa:

Nerozumím přesně otázce, ale jasně máš chybu v souboru interface.h. Za prvé K&R styl ze standardu C89 povoluje toto:

foo(n)
{
  // some code
}

... n je int a návratová hodnota je int -- jde o výchozí typ, pokud ho nespecifikuješ. C99 toto omezilo, ale jde napsat:

int foo(n) int n;
{
  // some code
}

C++ nedoplňuje výchozí typ, tak proto ta chyba -- někde v deklaraci funkce to chybí.

Editováno 8.2.2015 15:00
 
Nahoru Odpovědět 8.2.2015 14:58
Avatar
Xin_
Člen
Avatar
Odpovídá na David.Landa
Xin_:

_CHAR_INFO je definovana struktura ve windows.h

https://msdn.microsoft.com/en-us/library/ms682013(v=vs.85).aspx

a ja si chci udelat fci aby mi vracela tu strukturu resp. pole struktur ale nějakým způsobem odmítá vzít cizí datový typ ktery je v jiné knihovně, jako by ji svým způsobem neznal. Zkoušel jsem ji nahradit PCHAR_INFO ale to mi pak hazelo chyby v knihovně wincon.h

Nahoru Odpovědět 8.2.2015 15:19
Zvědavost nás žene vpřed :)
Avatar
David.Landa
Člen
Avatar
Odpovídá na Xin_
David.Landa:
PCHAR_INFO foo(/* args... */)
{
    PCHAR_INFO p = malloc(sizeof(CHAR_INFO));
    // some code
    return p;
}

nebo

struct _CHAR_INFO * bar()
{
struct _CHAR_INFO * p = malloc(sizeof(struct _CHAR_INFO));
return p ;
}

Editováno 8.2.2015 15:38
 
Nahoru Odpovědět 8.2.2015 15:34
Avatar
Xin_
Člen
Avatar
Odpovídá na David.Landa
Xin_:

s tím problém není. Jde mi o to že já chci definovat fci v .h a deklarovat .cpp ale neumožnuje mi to v tom .h vzít ten cizí typ. Pokud to napíšu klasicky k fci main tak to funguje.

Nahoru Odpovědět 8.2.2015 15:43
Zvědavost nás žene vpřed :)
Avatar
David.Landa
Člen
Avatar
Odpovídá na Xin_
David.Landa:

Promiň nevšiml jsem si, že to je C++, pak musíš přetypovat (void *) na u malloc na příslušný typ.

 
Nahoru Odpovědět 8.2.2015 15:45
Avatar
Xin_
Člen
Avatar
Odpovídá na David.Landa
Xin_:

vim vim, ale tohle mě (doufam) v tomdle případě netrápí :D

Nahoru Odpovědět 8.2.2015 15:47
Zvědavost nás žene vpřed :)
Avatar
David.Landa
Člen
Avatar
Odpovídá na Xin_
David.Landa:

V hlavičkovím souboru se funkce deklaruje, proč ji tam chceš definovat -- je to inline funkce? Ještě pořád nerozumím tvému schématu. Napiš jakou strukturu má projekt a kde v jakém .h/c máš které struktury.

Editováno 8.2.2015 15:50
 
Nahoru Odpovědět 8.2.2015 15:49
Avatar
Martin Dráb
Redaktor
Avatar
Martin Dráb:

A když uděláš ten hlavičkový soubor nějak takto:

#ifdef __MUJ_HEADER_H__
#define __MUJ_HEADER_H__

#include <windows.h>


CHAR_INFO getScreen();

#endif

pomůže to? Případně vracej tu strukturu CHAR_INFO jako výstupní parametr. Dělat to přes návratovou hodnotu není moc hezké.

Tzn. třeba takto:

void getScreen(PCHAR_INFO *Info);
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 8.2.2015 16:02
2 + 2 = 5 for extremely large values of 2
Avatar
David.Landa
Člen
Avatar
Odpovídá na Martin Dráb
David.Landa:

Pokud je to vytvářecí funkce, pak přes návratovou hodnotu, pokud je to modifikační funkce, pak jak píšeš. Chyba v include guards by to mohla být.

 
Nahoru Odpovědět 8.2.2015 16:10
Avatar
Odpovídá na Xin_
Libor Šimo (libcosenior):

Jednoznačne bola chyba v tom, že v súbore.h nebola includovana potrebná knižnica.

Nahoru Odpovědět 9.2.2015 6:47
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.