---
title: "En förändring i ingredienslistan -> alla pizzor uppdaters"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/143510-en-förändring-i-ingredienslistan-alla-pizzor-uppdaters"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "jme"
published: "2006-03-06T14:39:52.000Z"
updated: "2006-03-16T15:09:02.000Z"
replies: 16
views: 720
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/143510-en-förändring-i-ingredienslistan-alla-pizzor-uppdaters"
---

# En förändring i ingredienslistan -> alla pizzor uppdaters

## #1 — jme, 2006-03-06T14:39Z

Hej.

Håller på med en skoluppgift. Nej, vill inte ha allt löst. ;)
Ska göra ett konsoll-program som man ska kunna skapa en pizza-meny samt alla olika ingredienser.

Man skapar en ny pizza genom att ange vilka ingredienser som ingår.
Jag tänkte att jag skulle skapa en lista med alla ingredienser.

Jag har klasserna: pizza, ingrediens

Låt oss säga att jag har följande pizzor:

a) skinka, paprika
b) lök, räka, ananas
c) paprika, lök

När man skapar pizzorna a, b och c så skapar man inte en ny inbrediens-objekt, utan man använder ett ur listan.

Jag vill alltså få den funktionaliteten att ifall jag ändrar paprika till röd paprika så syns förändringen i alla pizzor.

Jag behöver inte ha en komplett lösning utan jag vill bara veta hur jag skall lagra alla ingredienser, så att förändringarna kan uppdateras.

Permalänk: https://www.webforum.nu/p/143510

## #2 — Phorpher, 2006-03-06T14:50Z

> **jme skrev:**
>
> Hej.
> 
> Håller på med en skoluppgift. Nej, vill inte ha allt löst. ;)
> Ska göra ett konsoll-program som man ska kunna skapa en pizza-meny samt alla olika ingredienser.
> 
> Man skapar en ny pizza genom att ange vilka ingredienser som ingår.
> Jag tänkte att jag skulle skapa en lista med alla ingredienser.
> 
> Jag har klasserna: pizza, ingrediens
> 
> Låt oss säga att jag har följande pizzor:
> 
> a) skinka, paprika
> b) lök, räka, ananas
> c) paprika, lök
> 
> När man skapar pizzorna a, b och c så skapar man inte en ny inbrediens-objekt, utan man använder ett ur listan.
> 
> Jag vill alltså få den funktionaliteten att ifall jag ändrar paprika till röd paprika så syns förändringen i alla pizzor.
> 
> Jag behöver inte ha en komplett lösning utan jag vill bara veta hur jag skall lagra alla ingredienser, så att förändringarna kan uppdateras.

Lagra en pizzas ingredienser som referenser till listan med ingrediensobjekt.

\[Ingredienser\] {Ost, Tomat, Svamp, Skinka}

\[Vesuvio\] {lista med referenser till Ost, Tomat och Skinka i Ingredienslistan}

Permalänk: https://www.webforum.nu/p/1777554

## #3 — jme, 2006-03-06T14:54Z

Äh, jag testade bara med pekare och det verkade inte fungera. Har inte så stor koll på detta med referenser och pekare. ;)

Ska testa nu!

Permalänk: https://www.webforum.nu/p/1777559

## #4 — jme, 2006-03-06T15:04Z

Jag testar dessa referense just nu med string-objekt, utan resultat.

Grejen med referenser är väl den att om man skapar en referense till ett objekt så kan man uppdatera objektet genom referensen och tvärtom? Dvs om man uppdaterar objektet direkt så syns förändringen även om man använder referensen?

Iofs så kör jag just nu med maps... 

Jag har följande kod:

```php
	map <string, string> names;

	string key = "name";
	string value = string("jme");

	string &ref = value;
	
	names.insert(make_pair(key, value) );

	map<string, string>::iterator it = names.find(key);

	ref = "ukko";

	if(it != names.end() )
	{
		cout << "Found it!" << endl;
		cout << it->first << endl;
		cout << it->second << endl;
		it->second = "pakko";
	}
	else
	{
		cout << "Could not find it!" << endl;
	}

	cout << value << endl; // jag vill at det ska vara "pakko" !
```

Permalänk: https://www.webforum.nu/p/1777566

## #5 — Phorpher, 2006-03-06T16:44Z

> **jme skrev:**
>
> Jag testar dessa referense just nu med string-objekt, utan resultat.
> 
> 
> Grejen med referenser är väl den att om man skapar en referense till ett objekt så kan man uppdatera objektet genom referensen och tvärtom? Dvs om man uppdaterar objektet direkt så syns förändringen även om man använder referensen?
> 
> Iofs så kör jag just nu med maps... 
> 
> Jag har följande kod:
> 
>
>
> ```php
> 	map <string, string> names;
> 
> 	string key = "name";
> 	string value = string("jme");
> 
> 	string &ref = value;
> 	
> 	names.insert(make_pair(key, value) );
> 
> 	map<string, string>::iterator it = names.find(key);
> 
> 	ref = "ukko";
> 
> 	if(it != names.end() )
> 	{
> 		cout << "Found it!" << endl;
> 		cout << it->first << endl;
> 		cout << it->second << endl;
> 		it->second = "pakko";
> 	}
> 	else
> 	{
> 		cout << "Could not find it!" << endl;
> 	}
> 
> 	cout << value << endl; // jag vill at det ska vara "pakko" !
> ```

Ett pair som du skapar med make_pair kommer att köra copy-constructors på strängarna för att forma en pair-struct. Därmed kommer alltså inte värdet i din map att förändras bara för att du har en referens till value. :)

Permalänk: https://www.webforum.nu/p/1777612

## #6 — Peter S, 2006-03-06T16:46Z

Använd pekare:

```
 map <string, string*> names;

    string key = "name";
    string value = string("jme");

    string &ref = value;
    
    names.insert(make_pair(key, &value) );

    map<string, string*>::iterator it = names.find(key);

    ref = "ukko";

    if(it != names.end() )
    {
        cout << "Found it!" << endl;
        cout << it->first << endl;
        cout << *(it->second) << endl;
        *(it->second) = "pakko";
    }
    else
    {
        cout << "Could not find it!" << endl;
    }

    cout << value << endl; // jag vill at det ska vara "pakko" !
```

> **jme skrev:**
>
> Jag vill alltså få den funktionaliteten att ifall jag ändrar paprika till röd paprika så syns förändringen i alla pizzor.

Då kan du använda statiska medlemmar. En sådan delas mellan samtliga instansieringar av klassen:

```
class c
{
 private:
  static std::string s;
 public:
  static void setS(const std::string& str){ s = str; }
  std::string getS(){ return s; }
};

std::string c::s = "default";

int main()
{
 c a,b;
 std::cout << a.getS() <<  ' ' << b.getS() << std::endl;

 c::setS("röd");
 std::cout << a.getS() <<  ' ' << b.getS() << std::endl;
}
```

Permalänk: https://www.webforum.nu/p/1777614

## #7 — jme, 2006-03-06T16:53Z

Nu ska jag göra mat men senare skall jag kika på era förslag, tack!

Permalänk: https://www.webforum.nu/p/1777617

## #8 — jme, 2006-03-06T19:09Z

Nu får jag:

Harjoitus error LNK2020: unresolved token (0A000041) ?ingredients@IngredientMenu@@0V?$list@VIngredient@@V?$allocator@VIngredient@@@std@@@std@@A
Harjoitus fatal error LNK1120: 1 unresolved externals

Kanske har jag missat nåt...ska kika...

Permalänk: https://www.webforum.nu/p/1777716

## #9 — jme, 2006-03-06T19:14Z

dubbelpost:

Permalänk: https://www.webforum.nu/p/1777719

## #10 — jme, 2006-03-16T14:02Z

Har följande klass-metod:

ingredients är: list \<Ingredient\> ingredients;
stuff fungerar helt bra men tar jag bort kommentaren från raden ovan så blir det fel:

Harjoitus fatal error LNK1120: 1 unresolved externals
Harjoitus error LNK2020: unresolved token (0A00001A) ?ingredients@IngredientMenu@@0V?$list@VIngredient@@V?$allocator@VIngredient@@@std@@@std@@A

```php
void IngredientMenu::removeIngredients()
{
	//ingredients.clear();
	list <Ingredient> stuff;
}
```

ingredients är statisk och det är metoden också.

Permalänk: https://www.webforum.nu/p/1784194

## #11 — jme, 2006-03-16T14:09Z

Hmm, skapade ännu en statisk klassvariabel, value och får samma fel.

Hur ska man skapa statiska, privata klassvariablar och en getXX() metod till dem?

Jag kör med int IngredientMenu::getValue() {return value; }

Just ja, man ska tydligen köra med IngredientMenu::ingredients.clear();

Inte för att det ännu skulle fungera.

Hur initieras en statisk klassvariabel och var?

Permalänk: https://www.webforum.nu/p/1784195

## #12 — Phorpher, 2006-03-16T14:23Z

> **jme skrev:**
>
> Hmm, skapade ännu en statisk klassvariabel, value och får samma fel.
> 
> Hur ska man skapa statiska, privata klassvariablar och en getXX() metod till dem?
> 
> Jag kör med int IngredientMenu::getValue() {return value; }
> 
> Just ja, man ska tydligen köra med IngredientMenu::ingredients.clear();
> 
> Inte för att det ännu skulle fungera.
> 
> Hur initieras en statisk klassvariabel och var?

```
class Foo
{
      public:
           static int GetValue() { return m_value; }

      private:
           static int m_value;
};
```

Initieringen gör du någonstans utanför klassdeklarationen om jag inte minns fel. Var ett tag sedan jag pillade C++.

```
int Foo::m_value = 0;
```

Permalänk: https://www.webforum.nu/p/1784201

## #13 — jme, 2006-03-16T14:24Z

Jag har deklarationerna för metoderna i en separat fil, "IngredientMenu.h".

Permalänk: https://www.webforum.nu/p/1784202

## #14 — jme, 2006-03-16T14:32Z

hmm, gjord nu en helt ny projekt och nu fick jag en statisk variabel och metod att fungera. Får väl jämföra dessa två projekt och se vart det gick åt skogen... :)

Permalänk: https://www.webforum.nu/p/1784206

## #15 — jme, 2006-03-16T14:36Z

Äh, ser ju inget fel med koden... :\|

Permalänk: https://www.webforum.nu/p/1784207

## #16 — jme, 2006-03-16T14:46Z

Tog bort allt onödigt:

"IngredientMenu.h"

```php
class IngredientMenu
{
private:
	static int value;
public:
	IngredientMenu();

	static int getValue();
};
```

"IngredientMenu.cpp"

```php
#include "IngredientMenu.h"

IngredientMenu::IngredientMenu() // default constructor
{
	value = 100;

}

int IngredientMenu::getValue()
{
	return value;
}
```

Detta ger mig:

Harjoitus fatal error LNK1120: 1 unresolved externals
Harjoitus error LNK2020: unresolved token (0A00001A) ?value@IngredientMenu@@0HA

Permalänk: https://www.webforum.nu/p/1784209

## #17 — jme, 2006-03-16T15:09Z

hmm, jahapp...det var visst int IngredientMenu::value = 0; som saknades

Permalänk: https://www.webforum.nu/p/1784219

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/143510-en-förändring-i-ingredienslistan-alla-pizzor-uppdaters
