Avatar billede jannikmunk Nybegynder
09. september 2004 - 15:25 Der er 7 kommentarer og
1 løsning

warning C4172: returning address of local variable or temporary

Jeg får følgende advarsel når jeg "Builder" min Visual Studio C++ kode:
>>>C:\Work\maaccom 1.2.249\Common.cpp(134) : warning C4172: returning address of local variable or temporary<<<

Advarslen peger på denne kode blok i "Common.cpp":

>>>
CString& ExtractNumberString(char* source, int position)
{
  size_t i,srclen;
  int noSlashesFound=0, noPos=0;
  srclen=strlen(source);
  if (position==0) return ExtractFirstNumberString(source);
  else {
    for (i=0; (i<srclen) && (noSlashesFound!=position); i++) {
      switch (source[i]) {
        case '/':
          noSlashesFound++;
          noPos=i+1;
        break;
      }
    }
    if (noPos)
      return ExtractFirstNumberString(&source[noPos]);
    else
      return CString("error");
  }
}
<<<

Det er "sidste" linien >>> return CString("error"); <<< som der peges på.

Er der nogen der har en ide til hvordan jeg løser dette problem ?

Venlig hilsen og på forhånd tak for hjælpen
Jannik
Avatar billede chries Nybegynder
09. september 2004 - 15:26 #1
CString& ExtractNumbe
->
CString ExtractNumbe
Avatar billede arne_v Ekspert
09. september 2004 - 15:29 #2
Prøv:

CString err("error");

CString& ExtractNumberString(char* source, int position)
{
  ...
    if (noPos)
      return ExtractFirstNumberString(&source[noPos]);
    else
      return err;
  }
}
Avatar billede jannikmunk Nybegynder
09. september 2004 - 15:52 #3
Hej Arne,

Tak for et hurtigt supersvar, det løste mit problem.

Venlig hilsen og tak for hjælpen
Jannik
Avatar billede arne_v Ekspert
09. september 2004 - 15:57 #4
så ligger jeg et svar
Avatar billede dilleberg Nybegynder
10. september 2004 - 01:57 #5
Returværdien bør være af type "const CString&" jvf følgende eksempel:

CString err("error");
CString& ReturnRef()
{
  return err;
}

  CString& ref1 = ReturnRef();
  CString& ref2 = ReturnRef();
  cout << "Ref1=" << (LPCTSTR)ref1 << endl;
  cout << "Ref2=" << (LPCTSTR)ref2 << endl;
  ref1 = "ok";
  cout << "Ref1=" << (LPCTSTR)ref1 << endl;
  cout << "Ref2=" << (LPCTSTR)ref2 << endl;
  ReturnRef() = "garbage";
  cout << "Ref1=" << (LPCTSTR)ref1 << endl;
  cout << "Ref2=" << (LPCTSTR)ref2 << endl;

med output

Ref1=error
Ref2=error
Ref1=ok
Ref2=ok
Ref1=garbage
Ref2=garbage

/db
Avatar billede Slettet bruger
10. september 2004 - 20:40 #6
arne hvad sker der for dig... jeg er begy. at være fan af dig... vide du bare alt hvad angår c++ eller hvad :P
Avatar billede arne_v Ekspert
10. september 2004 - 23:07 #7
dilleberg>

Ja - const vil give compile fejl på nogle forskellige uhensigtsmæssige
anvendelser af den referance.
Avatar billede arne_v Ekspert
10. september 2004 - 23:08 #8
dhil>

Der er skam meget jeg ikke ved om C++.
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



IT-JOB

Cognizant Technology Solutions Denmark ApS

Deskside Support Engineer

Centrica Energy

Head of CRM Solutions

Capgemini Danmark A/S

Network Architect
Seneste spørgsmål Seneste aktivitet
I dag 02:31 Ny Turtle Beach-gamingmus Af ractic i Andet hardware
I går 13:24 Datodrilleri Af camsti i Excel
I går 12:18 MICROSOFTS SELVTÆGT Af arnel i Andet software
I går 09:13 1084 s Af knuldefar1942 i Fri debat
I går 08:52 Trådløst netværketskort Af Esco i Wifi