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