Avatar billede mieritz Nybegynder
26. november 2003 - 10:36 Der er 14 kommentarer og
1 løsning

få fat i String i anden .cpp fil

Jeg har nogle Strings i en .cpp fil, men disse strings vil jeg meget gerne bruge i min anden .cpp fil, men jeg kan ikke få overført indholdet af dem til den anden .cpp selvom der er noget i dem. Jeg har prøvet at erklære dem extern, men det kan jeg ikke få til at virke hvordan kan jeg få fat i indholdet af dem.
Avatar billede arne_v Ekspert
26. november 2003 - 10:56 #1
Prøv lige og post noget kode. Det bør være helt trivielt at
accesse nogle globale variable fra flere .cpp filer.
Avatar billede mieritz Nybegynder
26. november 2003 - 10:59 #2
int type;
  String fg;
  if(!fsr) {
    type=-1;
    fg="All";
  } else if(lt==Protocol::logMinibar) {
    type=0;
    fg=fsr->fo_roomno.roomno;
  }

  else {
    type=1;
    fg=fsr->fo_foliono.foliono;
  }

jeg skal have fat i fg. dette er kun den ene string jeg skal have fat jeg har også andre, men de kan vel hentes på samme måde
Avatar billede arne_v Ekspert
26. november 2003 - 11:10 #3
Og du har prøvet at flytte erklæringen af fg ud som global (udenfor
funktioner/metoder) ?
Avatar billede mieritz Nybegynder
26. november 2003 - 11:12 #4
ja jeg har erklæret den helt i toppen af min fil
Avatar billede arne_v Ekspert
26. november 2003 - 11:16 #5
Og hvis du så laver samme erklæring eller:
  extern String fg;
i en anden .cpp - kan du så ikke bruge værdien der ?
Avatar billede mieritz Nybegynder
26. november 2003 - 11:17 #6
det er det jeg har gjort, men det er som om at værdien bliver slettet inden jeg vil bruge den
Avatar billede mieritz Nybegynder
26. november 2003 - 12:01 #7
jeg kan se at jeg har værdien gennem hele min ene fil, men når jeg så trykker på en kanp popper der et nyt window op og så mister mine Strings deres værdier, hvad kan det skyldes
Avatar billede arne_v Ekspert
26. november 2003 - 12:08 #8
Det lyder altså meget som om String fg står nede i en funktion/metode.
Avatar billede mieritz Nybegynder
26. november 2003 - 12:12 #9
void __fastcall TGetBillForm::GetRecordsClick(TObject *Sender)
{
  // Find log type and string for it:

  if(a>0){a=0;};
  if(b>0){b=0;};
  if(ce>0){ce=0;};
  if(d>0){d=0;};
  if(e>0){e=0;};
  if(fe>0){fe=0;};
  if(h>0){h=0;};
  if(i>0){i=0;};
  lt=Protocol::logUnknown;
  lt_name;
  if(RadVideo->Checked)  { lt=Protocol::logVideo;  lt_name="Video";      }
  if(RadPayTv->Checked) { lt=Protocol::logPayTv; lt_name="Pay Tv";}
  if(RadMinibar->Checked)  { lt=Protocol::logMinibar;  lt_name="Minibar";      }
  if(RadAll->Checked)    { lt=Protocol::logBill;    lt_name="Bill";        }
  if(RadSony->Checked)    { lt=Protocol::logSonyGames;    lt_name="Sony Games";        }
  if(Rad2M->Checked)    { lt=Protocol::log2MGames;    lt_name="2M Games";        }
  if(RadLaptop->Checked)    { lt=Protocol::logLaptop;    lt_name="Laptop Connect";        }
  if(RadEmail->Checked)    { lt=Protocol::logEmail;    lt_name="Email";        }
  if(RadChat->Checked)    { lt=Protocol::logChat;    lt_name="Chat";        }
  if(RadInternet->Checked)    { lt=Protocol::logInternet;    lt_name="WWW";        }

  // If user did not check anything:
  if(lt==Protocol::logUnknown) return;

  // Find the time interval:
  if(FromAll->Checked) {
    from.set_empty();
    from_str="begining";
  } else {
    from.fromDate(FromDate->Date);
    from.fromTime(FromTime->Time);
    from_str=from.to_str();
  }

  if(ToAll->Checked) {
    to.set_empty();
    to_str="end";
  } else {
    to.fromDate(ToDate->Date);
    to.fromTime(ToTime->Time);
    to_str=to.to_str();
  }

  // Generate string describing log:
  for_str=lt_name;
  for_str+=" log for ";
  if(fsr==0) {
    for_str+="all folios";
  } else {
    if(lt==Protocol::logMinibar) {
      for_str+=String("room ")+fsr->fo_roomno.roomno;
    } else {
      for_str+=String("folio ")+fsr->fo_foliono.foliono;
    }
    if(lt==Protocol::logSonyGames) {
      for_str+=String("room ")+fsr->fo_roomno.roomno;
    } else {
      for_str+=String("folio ")+fsr->fo_foliono.foliono;
    }
    if(lt==Protocol::log2MGames) {
      for_str+=String("room ")+fsr->fo_roomno.roomno;
    } else {
      for_str+=String("folio ")+fsr->fo_foliono.foliono;
    }
    if(lt==Protocol::logInternet) {
      for_str+=String("room ")+fsr->fo_roomno.roomno;
    } else {
      for_str+=String("folio ")+fsr->fo_foliono.foliono;
    }
    if(lt==Protocol::logLaptop) {
      for_str+=String("room ")+fsr->fo_roomno.roomno;
    } else {
      for_str+=String("folio ")+fsr->fo_foliono.foliono;
    }
    if(lt==Protocol::logEmail) {
      for_str+=String("room ")+fsr->fo_roomno.roomno;
    } else {
      for_str+=String("folio ")+fsr->fo_foliono.foliono;
    }
    if(lt==Protocol::logChat) {
      for_str+=String("room ")+fsr->fo_roomno.roomno;
    } else {
      for_str+=String("folio ")+fsr->fo_foliono.foliono;
    }
    if(lt==Protocol::logVideo) {
      for_str+=String("room ")+fsr->fo_roomno.roomno;
    } else {
      for_str+=String("folio ")+fsr->fo_foliono.foliono;
    }
    if(lt==Protocol::logPayTv) {
      for_str+=String("room ")+fsr->fo_roomno.roomno;
    } else {
      for_str+=String("folio ")+fsr->fo_foliono.foliono;
    }
  }
  for_str+=" from "+from_str+" to "+to_str;

  // Find out excalty which folio/room etc to read for:
  int type;
  String fg;
  if(!fsr) {
    type=-1;
    fg="All";
    fo=fg;
  } else if(lt==Protocol::logMinibar) {
    type=0;
    fg=fsr->fo_roomno.roomno;
  }

  else {
    type=1;
    fg=fsr->fo_foliono.foliono;
  }

  // Disable controls etc:
  Save->Enabled=false;
  Print->Enabled=false;
  GetRecords->Enabled=false;
  log=0;
 
  lastFromRoom = FromRoom->Enabled ? FromRoom->Text : String("All");
  lastToRoom = ToRoom->Enabled ? ToRoom->Text : String("All");
 
  // And then read the log:
  connection->getLog(type,fg,lt,from,to,onLogRead,
                    FromRoom->Enabled?atoi(FromRoom->Text.c_str()):-1,
                    ToRoom->Enabled?atoi(ToRoom->Text.c_str()):-1);

 
 


 

  fo;
  GetUpdate->Enabled=true;

Det er al koden der hvor fg indgår
Avatar billede arne_v Ekspert
26. november 2003 - 12:23 #10
Den står da også inde i koden.

String fg;  // her op

void __fastcall TGetBillForm::GetRecordsClick(TObject *Sender)
{
Avatar billede mieritz Nybegynder
26. november 2003 - 12:28 #11
jeg har også deklareret den oppe i toppen af min fil har bare ikke fået fjernet den fra dette sted endnu
Avatar billede arne_v Ekspert
26. november 2003 - 12:29 #12
Så retter din kode i den lokale og ikke i den globale !
Avatar billede mieritz Nybegynder
26. november 2003 - 12:31 #13
det jeg har prøvet er at jeg har lagt fg over i fo for at gemme variablen. I toppen af min fil har jeg så skrevet
String fo;

Og i den fil hvor jeg skal bruge min string fo har jeg skrevet

extern String fo;

burde det ikke virke
Avatar billede mieritz Nybegynder
26. november 2003 - 12:38 #14
jeg tror jeg har fundet min fejl. Jeg har declaret den samme String i min .h fil der hvor jeg skal bruge mine strings og det har åbenbart overskrevet mine Strings med ingenting så mine strings var tomme. Smid et svar så kan du få point for din hjælp
Avatar billede arne_v Ekspert
26. november 2003 - 13:56 #15
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester