Avatar billede hurra Novice
17. august 2005 - 14:46 Der er 5 kommentarer

Fejl med operator=

Jeg har lavet en classe der giver et par extra muligheder til en bool. Nu er mit problem så at jeg skal sætte en almindelig bool ligmed min udvidede bool. Kan i fortælle mig hvad der er galt her ?

bool boolpp::operator =(const boolpp &lbp)
{
  return value;
}

Der hvor det går galt er:
  MACLabel->Visible = Settings.ShowMACLabel;

Jeg kan jo selvføldig gøre det ved:
  MACLabel->Visible = Settings.ShowMACLabel.value;
Men det andet ville være lidt sejere :)
Avatar billede bertelbrander Novice
17. august 2005 - 19:42 #1
Det er så vidt jeg kan se ikke en = (assignment) operator, men en cast operator du har brug for:

#include <iostream>
class BoolEx
{
public:
  BoolEx(bool a) : Value(a) {}
  operator bool () { return Value; }
private:
  bool Value;
};

int main()
{
  BoolEx Ex(true);
  bool B = Ex;
}

(Der er en del C++ guru'er der mener at cast operatorer er "grimme", men dette er vist en af de mere uskyldige af slagsen.)
Avatar billede amma Nybegynder
18. august 2005 - 10:21 #2
Du skal helst ikke lave en bool operator bare for denne operation. LAv istedet en assignment operator, der tager en bool ...

boolpp& boolpp::operator =(bool _value)
{
  value = _value;
  return *this;
}

sådan! :)
Avatar billede hurra Novice
18. august 2005 - 10:54 #3
Det virker bertelbrander, du skal ha nogle points.

Dit forslag virker også amma, men det var bare ikke det jeg havde brug for i det her tilfælde, den havde jeg allerede lavet. Man kan vel sige jeres to løsnings forslag har ligenødgatig modsat virkemåde :)
Avatar billede hurra Novice
18. august 2005 - 10:58 #4
Hov jeg glemte lige, jeg har et tillægs spørgsmpl. Hvad sker der hvis jeg gør sådan her:
  if(Settings.ShowDownloadProgress)
Så ser den vel efter adressen for Settings.ShowDownloadProgress, og hvis adressen er forskellig fra NULL, kommer den ind i if sætningen? Eller bruger den value?   

To ting der virker:
if(Settings.ShowDownloadProgress.value) //hvis ikke jeg flytter value ind under private
if(bool(Settings.ShowDownloadProgress))
Avatar billede bertelbrander Novice
18. august 2005 - 19:48 #5
Dette program viser at du ikke behøver at gøre noget, den kalder "operator bool", som den skal.

#include <iostream>
class BoolEx
{
public:
  BoolEx(bool a) : Value(a) {}
  operator bool ()
  {
    std::cout << "BoolEx::operator bool" << std::endl;
    return Value;
  }
  BoolEx &operator = (bool a) { Value = a; return *this; }
private:
  bool Value;
};

int main()
{
  BoolEx Ex(true);
  if(Ex)
      std::cout << "True" << std::endl;
  else
      std::cout << "False" << std::endl;
  Ex = false;
  if(!Ex)
      std::cout << "False" << std::endl;
  else
      std::cout << "True" << std::endl;
}

Jeg ville måske lave en: bool BoolEx::GetAsBool();
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