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.
Annonceindlæg fra Publicis Sapient
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.
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
26. november 2003 - 11:10
#3
Og du har prøvet at flytte erklæringen af fg ud som global (udenfor funktioner/metoder) ?
26. november 2003 - 11:12
#4
ja jeg har erklæret den helt i toppen af min fil
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 ?
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
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
26. november 2003 - 12:08
#8
Det lyder altså meget som om String fg står nede i en funktion/metode.
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
26. november 2003 - 12:23
#10
Den står da også inde i koden. String fg; // her op void __fastcall TGetBillForm::GetRecordsClick(TObject *Sender) {
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
26. november 2003 - 12:29
#12
Så retter din kode i den lokale og ikke i den globale !
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
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
26. november 2003 - 13:56
#15
ok
Kurser inden for grundlæggende programmering