Gå til innhold

Problem med å laste inn iostream i VC++


Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet (endret)

Hallaien! Snakk om å vere trøtt...

 

Skal aldri poste på kvelden igjen, hehe, rotar så fælt då.. :p

 

Hadde skrive #import <iostream>... :D

 

EDIT: Korleis får eg linje-nummer-visning VC++?

Endret av Arne
Skrevet (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.. :p

Endret av Arne
Skrevet

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;
}

Skrevet (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 av Arne
Skrevet (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 av Jaffe
Skrevet (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 av Arne
Skrevet

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! :)

Skrevet

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);
}

Skrevet

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?

Skrevet (endret)

Hohoho, sjølvsagt gjer eg det, ja... :p Stack ruler!

 

...

 

Men tusen takk, det funkte bra det ja! :)

Endret av Arne
Skrevet

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?

Skrevet

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.

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...