Permalänk
Medlem

C++ skapa egen metod

Hej, har kört fast med en övnings uppgift igen... Förstår om det blir tjatigt att jag frågar här men då får ni säga till.
Iallafall så denna gång har jag en uppgift att skapa en metod som lägger till momsen till en viss summa. Antag att momsen är 25%.
(t.ex. talet 100 get alltså svaret 125).
Så beskrivs övningen.

Jag har skrivit detta och något är galet men kan ej hitta vad som är felet.
Först min moms.cpp

int momsen(double summa) { double moms = summa * (1.25); return moms; }

sen min moms.h

int momsen(double summa);

sedan kommer min main.cpp

#include <iostream> #include "moms.h" using namespace std; int main() { double summa; cout << "Ange summa: "; cin >> summa; int momsen(double); cout << "Summan med moms blir " <<momsen; cin.ignore(); cin.get(); return 0; }

Det funkar ju typ.. Jag kan skriva in summan och sen tror jag att den försöker räkna ut det men totalsumman blir ju hel galet.
Det ser ut som det blir en "adress" för det jag angivit eller något. Jag har försökt och läst mig till detta och testat bytt ut och haft mig men blir bara fel.
Då jag har testat så lägger jag ju 100 som summa bara för enkelhetens skull så jag skulle få 125 men jag får ju typ 00C913C0

Detta är min första övning då jag ska göra egna metoder så jag vet ju inte om jag har gjort dom rätt heller men jag antar att någon som kan ser det ganska snabbt.

Permalänk
Medlem

Du deklarer din metod momsen med en int, men du returnerar en double (moms). Din double blir därmed konverterad till en int.

EDIT: D.v.s. ändra:

int momsen(double summa) { double moms = summa * (1.25); return moms; }

till

double momsen(double summa) { double moms = summa * (1.25); return moms; }

eftersom du returnerar en double, samt

#include <iostream> #include "moms.h" using namespace std; int main() { double summa; cout << "Ange summa: "; cin >> summa; int momsen(double); // här deklarerar du en int vid namn momsen som tar in en double (intressant att det kompilerar), d.v.s. din metod momsen kallas inte här. cout << "Summan med moms blir " <<momsen; cin.ignore(); cin.get(); return 0; }

till

#include <iostream> #include "moms.h" using namespace std; int main() { double summa; cout << "Ange summa: "; cin >> summa; double moms = momsen(summa); // så här kallar du istället på din metod momsen med invariabeln summa som du sedan lagrar i en double (moms). Detta ska fungera eftersom din metod momsen ska returnera en double så fort den kallas med en double som invariabel. cout << "Summan med moms blir " <<moms; cin.ignore(); cin.get(); return 0; }

EDIT2: Hittade några fler misstag, har korrigerat dem ovan. Se om det funkar.

EDIT3: Har lagt till kommentarer i koden ovan (bakom //).

Visa signatur

12c/24t 4.0GHz (Zen2) • 2x16GiB 3200MHz C14 • RTX 2080 FE 1965MHz 7000MHz • X570 I PW • Ghost S1 MKII

Permalänk
Medlem

@Icte: Tack! Ja nu fungerar det. Ja det är där du skrivit kommentarer där jag var säker på att jag gjort något fel testa lite olika saker men fick det aldrig att funka men nu när du förklarat det så tror jag att jag förstår lite mer iallafall. för jag ändrade själv nån vända till moms också fast jag ändrade aldrig från int till double på de andra ställena så kan nog varit det också som gjorde det hela svårare för mig som nybörjare att hitta felet.

Tack för sånt snabbt svar!

Permalänk
Medlem
Skrivet av Icte:

... int momsen(double); // här deklarerar du en int vid namn momsen som tar in en double (intressant att det kompilerar), d.v.s. din metod momsen kallas inte här. ...

Orsaken till att det kompilerar är för att det i själva verket är en funktionsdeklaration, och inte en variabel. I utskriften så hanteras 'momsen' som en funktionspekare, vilket är orsaken till att utskriften säger 00C913C0 (som är en 32-bitars pekare i hexadecimal representation).

Permalänk
Medlem

@blewz: Inga problem, sånt händer alla Återkom gärna ifall du har fler frågor!

@perost: Aha, då hänger jag med! Tack för förklaringen!

Visa signatur

12c/24t 4.0GHz (Zen2) • 2x16GiB 3200MHz C14 • RTX 2080 FE 1965MHz 7000MHz • X570 I PW • Ghost S1 MKII