.[ ČeskéHry.cz ].
C++ problem s header files
Jdi na stránku 1, 2, 3, 4, 5, 6  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
koso



Založen: 28. 05. 2009
Příspěvky: 110

PříspěvekZaslal: 20. červen 2009, 11:30:46    Předmět: C++ problem s header files Odpovědět s citátem

Bry den.Skusal som urobit cyklus casu ulozil som to ako cas.h. Naincludoval som to do hlavneho programu a tam som chcel vypisat jednu premennu.Vsetky potrebne premenne v cas.h som definoval ako external a tuto ktoru som potreboval som si znova definoval v main() funkcii.kompilator hlasi: error C2205: 'sec' : cannot initialize extern variables with block scope .Ako sa da tomu predist???Pouzivam microsoft visual studio 2008.
vopred diki za pomoc
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1051

PříspěvekZaslal: 20. červen 2009, 12:04:52    Předmět: Odpovědět s citátem

takze do *.h suborov patria len makra,prorotypy funkcii a oznacenie premennych za superglobalne pomocou extern. samotna implementacia funkcii a deklaracia premennych patri len do *.cpp suborov.

cas.h
kód:

#ifndef _CAS_H_ //dolezite aby nam prekladac nehlasil viacnasobnu definiciu.
#define _CAS_H_ //_CAS_H_ by mal byt jedinecne teda pre kazdy subor iny. nemal by byt pozity nikde inde
extern int sek;
int funkcia(int parameter);

#endif

cas.cpp
kód:

#include "cas.h" //dolezite
int sek;

inr funkcia(int parameter)
{
//tu napiseme implementaciu
int i=0;
while(100)
{
sek++;
}
retuen sek;
}


_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
koso



Založen: 28. 05. 2009
Příspěvky: 110

PříspěvekZaslal: 20. červen 2009, 12:15:24    Předmět: Odpovědět s citátem

Nepomohlo, ale niesom si isty ci som to pouzil spravne Sad . touto problematikou sa zaoberam prvy raz.
prikladam cely kod cas.h:
kód:
#include<cstdlib>
#include<iostream>
#include<windows.h>
#include<string.h>

int cas()
{
   #ifndef _CAS_H_
    #define _CAS_H_
      extern int sec=0,min=0,hod=0,den=1,tyz=1,mes=1,rok=1992;
     extern char den_meno[10], mes_meno[10];
         #endif
     while (sec!=65)
     {
              //Sleep(100);
                  sec=sec+1;
                  if(sec==60){sec=0; min=min+1;}
                  if(min==60){min=0; hod=hod+1;}
                  if(hod==24){hod=0; den=den+1;}
              if(den>7){den=1; tyz=tyz+1;}
              if(tyz>4){tyz=1; mes=mes+1;}
              if(mes>12){mes=1; rok=rok+1;}
              /////////////////////////////////
              switch(den)
              {
               case 1: strcpy_s(den_meno, "pondelok");break;
               case 2: strcpy_s(den_meno, "utorok");break;
               case 3: strcpy_s(den_meno, "streda");break;
               case 4: strcpy_s(den_meno, "stvrtok");break;
                case 5: strcpy_s(den_meno, "piatok");break;
               case 6: strcpy_s(den_meno, "sobota");break;
               case 7: strcpy_s(den_meno, "nedela");break;
              }
              ////////////////////////////////////
              switch(mes)
              {
               case 1: strcpy_s(mes_meno, "januar");break;
               case 2: strcpy_s(mes_meno, "februar");break;
               case 3: strcpy_s(mes_meno, "marec");break;
               case 4: strcpy_s(mes_meno, "april");break;
                case 5: strcpy_s(mes_meno, "maj");break;
               case 6: strcpy_s(mes_meno, "jun");break;
               case 7: strcpy_s(mes_meno, "jul");break;
               case 8: strcpy_s(mes_meno, "august");break;
               case 9: strcpy_s(mes_meno, "september");break;
               case 10: strcpy_s(mes_meno, "oktober");break;
               case 11: strcpy_s(mes_meno, "november");break;
               case 12: strcpy_s(mes_meno, "december");break;
              }
              /////////////////////////////////////////////
                  //printf(" %.2d:%.2d:%.2d %s %d.tyzden %s %d\n",hod,min,sec,den_meno,tyz,mes_meno,rok);
      }
     // system("pause");
    return 0;

}       
         
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1051

PříspěvekZaslal: 20. červen 2009, 12:25:11    Předmět: Odpovědět s citátem

tak myslim ze najpr ich treba deklarovat cez extern a az potom im priradovat hodnotu
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
michalferko



Založen: 29. 09. 2008
Příspěvky: 83

PříspěvekZaslal: 20. červen 2009, 12:25:28    Předmět: Odpovědět s citátem

V tom co ti napisal nou pridaj ku premennej sek rovnakym sposobom aj dalsie premenne a telo tvojej funkcie uloz do cas.cpp tak ako to spravil nou. Nie je rozumne tlacit to do jedneho suboru a to co si napisal ty je ocividne nepochopenie jednoducheho navodu, ktory ti nou dal.
cas.h
kód:

#ifndef _CAS_H
#define _CAS_H

extern int sek;
extern int min;
.
.
.

int cas();

#endif

cas.cpp
kód:

#include "cas.h"
#include<cstdlib>
#include<iostream>
#include<windows.h>
#include<string.h>

int sek = 34;
int min = 43;
.
.
.

int cas()
{
telo funkcie sem!
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
koso



Založen: 28. 05. 2009
Příspěvky: 110

PříspěvekZaslal: 20. červen 2009, 12:29:36    Předmět: Odpovědět s citátem

takze telo funkcie cas() nemoze byt v cas.h? tie vypocty sa musia robit v main.cpp?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1051

PříspěvekZaslal: 20. červen 2009, 12:46:46    Předmět: Odpovědět s citátem

nie telo funkcie das do cas.cpp a pridas dany subor do projektu. inak taketo globalne premenne nie su dobra vec. zneprehladnuju kod a stazuju ladenie.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1827

PříspěvekZaslal: 20. červen 2009, 13:39:14    Předmět: Odpovědět s citátem

koso, este raz si precitaj, co ti napisal nou a dobre si vsimni, ze su to 2 rozne subory!

Tu direktivu "#ifndef __NAZOV_H_SUBORU" a dalsie z tej ukazky budes davat do kazdeho hlavickoveho suboru na zaciatok (a na koniec podla ukazky).

Ked sa preklada kod, tak direktiva "#include" v podstate "nalepi" cely referencovany subor na to miesto, kde sa vyskytuje (ta direktiva). No a prave direktivy "#ifndef" (v pripade, ze nie je definovane), "#define" a "#endif" ti zabezpecia to, ze sa obsah hlavickoveho .h suboru nenalepi na viacere miesta, ale len na PRVE miesto. A tak bude prekladac happy Smile
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
koso



Založen: 28. 05. 2009
Příspěvky: 110

PříspěvekZaslal: 20. červen 2009, 14:24:56    Předmět: Odpovědět s citátem

potom ale tie premenne mozem pouzivat aj mimo cas.cpp?potrebujem proste len to aby mi cas.cpp pocital tie cykly casu a potom ich potrebujem v main.cpp vypisat.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1051

PříspěvekZaslal: 20. červen 2009, 15:16:22    Předmět: Odpovědět s citátem

ano mozes. na to su definovane ako extern v cas.h takze staci includnut cas.h vsade tam kde chces pracovat s premennymi. ale globalne premenne su hnus a superglobalne premenne este vetsi. mal by si sa velmi rychlo oducit taketo nieco pouzivat.

napr co ti brani spravit funkciu cas() takto
kód:
int cas(int *sec, int *min, int *den, int *tyz, int *mes, int *rok);

a nasledne implementovat
kód:

int cas(int *sec, int *min, int *den, int *tyz, int *mes, int *rok)
{
//nejaky kod
*min = 45;//priradim do premennej hodnotu 45
printf("%d ", *rok); //vypisem obsah premennej rok
}

a nasledne v kode ju takto volat
kód:
int a,b,c,d,e,f,g;
cas(&a, &b, &c, &d, &e, &f, &g);

takto sa da dostat z funkcie viac nez jednu navratovu hodnotu. dalej si mozes aj spravit strukturu datum do ktorej si vsetko toto ulozis.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
koso



Založen: 28. 05. 2009
Příspěvky: 110

PříspěvekZaslal: 20. červen 2009, 15:24:22    Předmět: Odpovědět s citátem

ten posledny kod, da sa potom ta funkcia cas() volat hocikde v main() a aj inde?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1051

PříspěvekZaslal: 20. červen 2009, 15:27:48    Předmět: Odpovědět s citátem

ano samozrejme. ono v C je velmi dolezite pochopenie pojmu ukazovatel,pointer. takze odporucam si to dokladne nastudovat.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
koso



Založen: 28. 05. 2009
Příspěvky: 110

PříspěvekZaslal: 20. červen 2009, 15:33:25    Předmět: Odpovědět s citátem

mohol by si mi vysvetlit preco su global premenne take zle? zatial som s nimi nerobil, a ako pocuvam tak sa to ani neoplati.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1051

PříspěvekZaslal: 20. červen 2009, 15:55:50    Předmět: Odpovědět s citátem

pretoze je to nesystemove. neprehladne, extremne nachylne k chybam, tazko laditelne a vsetky mozne nevyhody.

tazko si udrzis prehlad co kde ako pristupuje k danej premennej. kto do nej zapisuje a kde sa tak deje. jedine koser vyuzitie takychto super globalnych premenych je na nacitanie adries funkcii ako sa napr roby v OpenGL.

ked mas globalne premenne tak nemas po urcitom case co to napises potuchy kde a v ako poradi sa pracuje s danou premennou.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
koso



Založen: 28. 05. 2009
Příspěvky: 110

PříspěvekZaslal: 20. červen 2009, 16:00:45    Předmět: Odpovědět s citátem

mohlo by cas.cpp vyzerat takto:
kód:
#include<cstdlib>
#include<iostream>
#include<windows.h>
#include<string.h>
int cas(int *sec=0,int *min=0,int *hod=0,int *den=1,int *tyz=1,int *rok=1992)
{
      while(*sec!=65)
      {
              //Sleep(100);
                  *sec=*sec+1;
                  if(*sec==60){*sec=0; *min=*min+1;}
                  if(*min==60){*min=0; *hod=*hod+1;}
                  if(*hod==24){*hod=0; *den=*den+1;}
              if(*den>7){*den=1; *tyz=*tyz+1;}
              if(*tyz>4){*tyz=1; *mes=*mes+1;}
              if(*mes>12){*mes=1; *rok=*rok+1;}
     }
}

char cas_m(char *den_meno[10], char *mes_meno[10])
{
        int m, d;
        cas()
   while(*sec!=65)
   {
              switch(*den)
              {
               case 1: strcpy(*den_meno, "pondelok");break;
               case 2: strcpy(*den_meno, "utorok");break;
               case 3: strcpy(*den_meno, "streda");break;
               case 4: strcpy(*den_meno, "stvrtok");break;
                case 5: strcpy(*den_meno, "piatok");break;
               case 6: strcpy(*den_meno, "sobota");break;
               case 7: strcpy(*den_meno, "nedela");break;
              }
              ////////////////////////////////////
              switch(*mes)
              {
               case 1: strcpy(*mes_meno, "januar");break;
               case 2: strcpy(*mes_meno, "februar");break;
               case 3: strcpy(*mes_meno, "marec");break;
               case 4: strcpy(*mes_meno, "april");break;
                case 5: strcpy(*mes_meno, "maj");break;
               case 6: strcpy(*mes_meno, "jun");break;
               case 7: strcpy(*mes_meno, "jul");break;
               case 8: strcpy(*mes_meno, "august");break;
               case 9: strcpy(*mes_meno, "september");break;
               case 10: strcpy(*mes_meno, "oktober");break;
               case 11: strcpy(*mes_meno, "november");break;
               case 12: strcpy(*mes_meno, "december");break;
              }
              /////////////////////////////////////////////
                  //printf(" %.2d:%.2d:%.2d %s %d.tyzden %s %d\n",hod,min,sec,den_meno,tyz,mes_meno,rok);
      }
      //system("pause");
}       


ako sa daju z volanej funkcie priradit len urcite premenne.ja potrebujem priradit premennu den a mes na premenne m, d
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3, 4, 5, 6  Další
Strana 1 z 6

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna