Gå til innhold

Problem med å laste inn iostream i VC++


Anbefalte innlegg

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
Videoannonse
Annonse

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
Lenke til kommentar

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
Lenke til kommentar

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

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
Lenke til kommentar

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
Lenke til kommentar

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

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

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

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

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...