Arne Skrevet 31. mars 2008 Del Skrevet 31. mars 2008 Hei! Eg får ikkje til å laste inn iostream i VC++! Når eg kompilerer, får eg denne feilmeldinga: 1>c:\users\arne\documents\visual studio 2008\projects\bank_project\bank_project\main.cpp(1) : fatal error C1083: Cannot open type library file: 'c:\program files\microsoft visual studio 9.0\vc\include\iostream': Det oppstod en feil under innlasting av typebibliotek/-DLL. Kva skal eg gjere? Lenke til kommentar
GeirGrusom Skrevet 31. mars 2008 Del Skrevet 31. mars 2008 Hvordan inkluderer du det? #include <iostream>? det virker på meg som om du har skrevet #using iostream e.l. siden den prøver å inkludere den som en .tlb eller .dll Lenke til kommentar
Arne Skrevet 1. april 2008 Forfatter Del Skrevet 1. april 2008 (endret) Hallaien! Snakk om å vere trøtt... Skal aldri poste på kvelden igjen, hehe, rotar så fælt då.. Hadde skrive #import <iostream>... EDIT: Korleis får eg linje-nummer-visning VC++? Endret 1. april 2008 av Arne Lenke til kommentar
GeirGrusom Skrevet 1. april 2008 Del Skrevet 1. april 2008 hehe da var det ikke så rart nei Tools->Options Text editor->C/C++->[Display]Line numbers Lenke til kommentar
Arne Skrevet 1. april 2008 Forfatter Del Skrevet 1. april 2008 (endret) Takk skal du ha! Det er litt vanskelig å telje linje for linje viss du veit at feilen ligg i linje 95... :=) Men forresten, innan OOP i C++, må eg deklarere idenifierane som private variablar i klassen eller er det berre å ha så mange argument i metodane som eg vil utan å måtte deklarere dei på førehand? Denne verker nemleg ikkje: class Bank { private: double Saldo; int AccountName; public: Bank(double StartBalance, int Account_name); void AddBalance(double BalanceToAdd); void MinusBalance(double BalanceToMinus); double GetBalance(); Bank::Bank() { Saldo = Saldo + StartBalance; AccountName = Account_name; } void Bank::AddBalance() { Saldo = Saldo + BalanceToAdd; } void Bank::MinusBalance() { Saldo = Saldo - BalanceToMinus; } double Bank::GetBalance() { return Saldo; } }; EDIT: Ja, eg veit at "Minus balance" neppe er noko god engelsk, men det var noko eg skreiv ned fort og gale.. Endret 1. april 2008 av Arne Lenke til kommentar
NevroMance Skrevet 1. april 2008 Del Skrevet 1. april 2008 Kan hende jeg tar feil, men tror du må skrive metodene utenfor klassen hvis du gjør det slik. Altså I klassen si hva slags metoder du skal ha, og utenfor kan du skrive selve metodene. Du må også ha de samme parameterene i metodene du skriver ferdig som du har i klassen. Altså skal det bli: class Bank { private: double Saldo; int AccountName; public: Bank(double StartBalance, int Account_name); void AddBalance(double BalanceToAdd); void MinusBalance(double BalanceToMinus); double GetBalance(); } Bank::Bank(double StartBalance, int Account_name) { Saldo = Saldo + StartBalance; AccountName = Account_name; } void Bank::AddBalance(double BalanceToAdd) { Saldo = Saldo + BalanceToAdd; } void Bank::MinusBalance(double BalanceToMinus) { Saldo = Saldo - BalanceToMinus; } double Bank::GetBalance() { return Saldo; } Lenke til kommentar
Arne Skrevet 1. april 2008 Forfatter Del Skrevet 1. april 2008 (endret) No verker det, bortsett frå at eg får denne erroren: error C2512: 'Bank' : no appropriate default constructor available Men skal det ikkje gå an å definere metodar inni klassen? Ellers så blir det vel veldig rotete i store prosjekt? EDIT: Eg fann ut av det, det var når eg skulle lage nytt objekt eg klussa litt. Endret 1. april 2008 av Arne Lenke til kommentar
Jaffe Skrevet 1. april 2008 Del Skrevet 1. april 2008 (endret) Du kan definere metodene innenfor selve klassedefinisjonen, men da må du ikke bruke scope-operatøren ( :: ) for å oppgi hvilken klasse metodene skal høre til. Edit: drittsmiley Endret 1. april 2008 av Jaffe Lenke til kommentar
Arne Skrevet 1. april 2008 Forfatter Del Skrevet 1. april 2008 OOOO, så kjem killeren inn på banen, og då blir det orden i sysakene... Takk skal de ha, alle sammen! Lenke til kommentar
GeirGrusom Skrevet 1. april 2008 Del Skrevet 1. april 2008 Hvis du definerer funksjoner rett i klassen, vil også de funksjonene bli definert som inline... hvis du bryr deg om det Lenke til kommentar
Arne Skrevet 1. april 2008 Forfatter Del Skrevet 1. april 2008 (endret) Det vil seie at viss eg inkluderar klassen frå ein annan fil, så fylgjer alle metodane med? Forresten, korleis kan eg bruke ein pointer (er det det heiter?) til eit objekt som argument? Slik at eg kan bruke eit objekt1 i objekt2, og kva objekt1 heiter spesifiserer eg når eg konstruerar objekt2. Viss de forstår... Edit: eg trur eg får det til: obj1(obj2 ekstraobjekt). Viss dette er constructoren min, så kan eg bruke eit objekt av klassen obj2 i obj1. Endret 1. april 2008 av Arne Lenke til kommentar
GeirGrusom Skrevet 1. april 2008 Del Skrevet 1. april 2008 hehe les om pekere du class my_class { std::wstring name = L"Hello World!"; }; int some_func(my_class &class_reference) { class_reference.name = L"Nothing"; } Lenke til kommentar
Arne Skrevet 2. april 2008 Forfatter Del Skrevet 2. april 2008 Takk skal du ha. Sånn mens vi fyrst er i gang, korleis kan eg tømme eit objekt for data, og setje inn nye med ein ny constructor? Eg lager nemlig eit bankobjekt der det varierer kva konto du er innpå, og det er fint viss eg kan bruke den same variabelen på alle! Lenke til kommentar
GeirGrusom Skrevet 2. april 2008 Del Skrevet 2. april 2008 I C++ er det veldig viktig at du sletter minneområdet du allokerer. Hvis du f.eks. lager en ny instanse av Konto class Konto { private: double m_value; public: double Value() { return m_value; } Value(double value) { m_value = value; } }; så vil du lage en instanse med new nøkkelordet Konto *min_konto = 0; int main() { // Lag en ny konto min_konto = new Konto(); min_konto.Value(200000.0); // Slett kontoen delete min_konto; } Hvis du derimot bruker stack allokering, så trenger du ikke slette dette, fordi da vil objektet automatisk gå ut av scope int main() { Konto min_konto = Konto(); min_konto.Value(200000.0); } Lenke til kommentar
Arne Skrevet 2. april 2008 Forfatter Del Skrevet 2. april 2008 Eg trur eg datt litt av lasset her, fordi eg med denne koden: #include <iostream> #include <string> using namespace std; class Bank { private: double Saldo; int AccountName; public: Bank(double StartBalance, int Account_name) { Saldo = 0; AccountName = 0; Saldo = Saldo + StartBalance; AccountName = Account_name; } double GetBalance() { return Saldo; } void AddBalance(double BalanceToAdd) { Saldo = Saldo + BalanceToAdd; } void MinusBalance(double BalanceToMinus) { Saldo = Saldo - BalanceToMinus; } }; int main() { Bank bankobjekt = Bank(5000, 565); cout << bankobjekt.GetBalance() << endl; cin.get(); delete bankobjekt; Bank bankobjekt = Bank(2000.00, 456); cout << bankobjekt.GetBalance() << endl; return 0; } Får denne feilmeldinga: 1>c:\users\arne\documents\visual studio 2008\projects\bank_project\bank_project\main.cpp(43) : error C2440: 'delete' : cannot convert from 'Bank' to 'void *' Treng eg ikkje ein destructor her? Lenke til kommentar
GeirGrusom Skrevet 2. april 2008 Del Skrevet 2. april 2008 du trenger ikke skrive delete fordi du allokererbankobject på stack, og ikke heap. Lenke til kommentar
Arne Skrevet 2. april 2008 Forfatter Del Skrevet 2. april 2008 (endret) Hohoho, sjølvsagt gjer eg det, ja... Stack ruler! ... Men tusen takk, det funkte bra det ja! Endret 2. april 2008 av Arne Lenke til kommentar
NevroMance Skrevet 2. april 2008 Del Skrevet 2. april 2008 Hmmm... Morsom greie det med stack og heap allokering. Burde vel egentlig lage en egen tråd for det, men siden GeirGrusom tok det opp. Hva er forskjellen mellom stack og heap allokering, bortsett fra at du ikke trenger å delete objektet etter en stack allokering? Lenke til kommentar
GeirGrusom Skrevet 2. april 2008 Del Skrevet 2. april 2008 Et program har begrenset med stack tilgjengelig, ca 4K tror jeg er vanlig, er ikke helt sikker, men det blir ihvertfall spesifisert av .exe headeren, og du kan stille det selv. Men stacken vil ofte ligge i prosessorens cache, og kan derfor være veldig mye raskere. Men som kjent så vil stack allokerte verdier forsvinne ut av scope, og dette er det ingenting man kan gjøre noe med, så i mange tilfeller kan ikke stack objekter brukes. f.eks. vil ikke dette fungere: Bankobject *CreateBankObject() { Bankobject obj; return &obj; } fordi obj vil destrueres når funksjonen faller ut av scope, og dataene som pekeren peker til, vil ha udefinert verdi. Lenke til kommentar
NevroMance Skrevet 2. april 2008 Del Skrevet 2. april 2008 Ok. Skjønner, men gjelder dette kun i windows? Siden du sier det blir spessifisert i .exe headeren hvor mye plass stacken har. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå