Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


instack+exception

Postades av 2005-08-07 21:38:11 - Elisabeth Andersson, i forum c++, Tråden har 14 Kommentarer och lästs av 865 personer


Hej

Detta är en enkel int-stack. Jag vill använda exception. Utan exception funkar bra men när jag inforgar
exception i mina två funktioner kommer följande:

....StringIndexOutOfRange......
undefined std....
...
...
...




Ser ni var felet ligger eller ska jag infoga en annan fil???hjälp mig


Mvh lisa

kOd:
// #################################### H-FIL

#ifndef MINSTACK_H
#define MINSTACK_H
#include <iostream.h>
#include <stdexcept>
using namespace std;

class Minstack{
public:
Minstack(int storlek=10);
~Minstack(){delete[]stacken;}

void push(const int &obj)throw(length_error);
int pop()throw(length_error);
void print();

private:
int *stacken;
int strlk,top;

Minstack(const Minstack *s){}
const Minstack operator=(const Minstack &s){return *this;};
};


Minstack::Minstack(int s)
:strlk(s)
{
top=-1;
stacken = new int[strlk];
}

void Minstack::push(const int &obj)throw(length_error){
if(top>=strlk-1)
throw length_error("fel");
stacken[++top]=obj;

}

int Minstack::pop()throw(length_error){
if(top<=-1)
throw length_error("Fel");
return stacken[top--];
}
void Minstack::print(){
cout<<"Antal i stacken just nu: "<<(top+1)<<endl;
for(int i=top;i>=0;i--)
cout<<stacken[i]<<" ";
}
#endif
// ############################# CPP-FIL ############################

#include <iostream.h>
#include "minstack.h"

void main(){
Minstack st(4);

try{

st.push(8);
st.push(6);
st.push(4);
st.push(2);

}
catch(length_error l){
cout<<l.what();
}
st.print();
try{

st.pop();
st.pop();
}
catch(length_error l){
cout<<l.what();
}
st.print();


cin.get();
cin.get();
}


Svara

Sv: instack+exception

Postades av 2005-08-07 21:57:28 - Niklas Jansson

För det första så ska du byta ut

#include <iostream.h>

till

#include <iostream>

och använda std:: framför allt i standardbiblioteket, ex. std::cout << "apa";

Sen som ett tips har du valt lite onödiga namn; "strlk" istället för "storlek", hur mycket tjänar det till egentligen? =)

Använd hellre talande namn på alla funktioner och variabler.

Hur som helst: Låter du throw-hänvisningen stå kvar när du inte kör med exceptions?
alltså
throw(length_error)
i deklarationen
void push(const int &obj)throw(length_error);

Det finns en del kompilatorer som inte fixar det. Om du provar att ta bort dem, så kan det funka,


Svara

Sv:instack+exception

Postades av 2005-08-08 01:38:18 - Per Persson

<b>och använda std:: framför allt i standardbiblioteket, ex. std::cout << "apa";</b>

Eller så som du redan gör:
using namespace std;


Svara

Sv: instack+exception

Postades av 2005-08-09 19:06:30 - Niklas Jansson

...vilket man ju inte bör göra, eftersom man då tappar hela syftet med namnrymder.


Svara

Sv:instack+exception

Postades av 2005-08-09 20:52:55 - Per Persson

Och detta har vi redan haft en lång diskussion om. Orkar dock inte leta reda på tråden.


Svara

Sv: instack+exception

Postades av 2005-08-10 11:42:05 - Niklas Jansson

Ja, jag vet. Men hur som helst kan du väl ändå inte anse att man bör öppna en namnrymd i den globala?


Svara

Sv:instack+exception

Postades av 2005-08-11 12:51:28 - Per Persson

Om identifierarna från en namnrymd används överallt i ett program, dvs globalt, varför inte öppna namnrymden globalt?

Idén med namnrymder är att slippa använda långa namn som mysql_select_db() där man bakar in namnrymden i namnet och inte kan plocka bort det när identifieraren används. När programmeringsspråket stödjer namnrymder kan man, om ingen risk för namnkollision finns, klara sig med att skriva select_db(). Detta har dessutom fördelen att om man skulle byta databas, räcker det att byta ut <b>using namespace mysql;</b> mot <b>using namespace annandb;</b>.


Svara

Sv: instack+exception

Postades av 2005-08-11 15:09:23 - Niklas Jansson

Du verkar vara helt övertygad om att man ska öppna namnrymder globalt, till skillnad från majoriteten av C++-användarna. Sen köper jag inte dina argument.

<b>>Idén med namnrymder är att slippa använda långa namn som mysql_select_db()</b>
Långt ifrån det enda skälet. Det primära skälet var att enkelt kunna modifiera gamla bibliotek och headerfiler för att kunna följa en modernare syntax.

<b>>Detta har dessutom fördelen att om man skulle byta databas, räcker det att[...]</b>
Det där är inte sättet man i allmänhet gör det i C++. Det normala är att om man har två namnrymder A och B, så definierar man ett nytt som man kallar C, och sätter det till att vara A eller B, och refererar sen till C genom hela applikationen. Vill man någon gång byta byter man bara vad C är.

<b>>Om identifierarna från en namnrymd används överallt i ett program, dvs globalt, varför inte öppna namnrymden globalt? </b>
Eftersom programmet kan växa till den punkt när man inte längre kan ha en namrymd öppen globalt, och då måste gå igenom hela programmet för att flytta in namnrymden i metoder eller klasser.


Svara

Sv:instack+exception

Postades av 2005-08-11 15:22:37 - Per Persson

<b>Du verkar vara helt övertygad om att man ska öppna namnrymder globalt</b>

Inte alla namnrymder skall öppnas globalt. Den enda jag rekommenderar öppnas globalt är std.



<b>Det primära skälet var att enkelt kunna modifiera gamla bibliotek och headerfiler för att kunna följa en modernare syntax</b>

Vilken "modernare syntax" syftar du på?


Svara

Sv: instack+exception

Postades av 2005-08-11 17:19:14 - Niklas Jansson

<b>>Inte alla namnrymder skall öppnas globalt. Den enda jag rekommenderar öppnas globalt är std.</b>

Citat:
<b>>Om identifierarna från en namnrymd används överallt i ett program, dvs globalt, varför inte öppna namnrymden globalt? </b>
Det där låter lite mer generellt än du sa nu...?

<b>>Vilken "modernare syntax" syftar du på?</b>
Den som tillkom efter 1994. Sen är väl kanske syntax fel ord, snarare "paradigm" eller så, men genom att införa namnrymderna kunde man enkelt behålla gamla bibliotek med minimala förändringar både i biblioteken och i klientkod.


Svara

Sv:instack+exception

Postades av 2005-08-11 17:36:58 - Per Persson

Det ena var en fråga inte en rekommendation; jag ville få ett argument. Det andra var en rekommendation.

Sedan kan man skilja mellan olika typer av projekt. I grundkurser i programmering, där man i första hand skall lära sig hur programmering fungerar, ser jag inget hinder att öppna std globalt. Och jag uppfattade det som att trådskaparen ligger ungefär på eller strax ovanför denna nivå. I ett större projekt kan det vara en annan sak.



Utveckla gärna vilket paradigmskifte du syftar på som förenklades genom införandet av namnrymder.


Svara

Sv: instack+exception

Postades av 2005-08-11 18:25:34 - Niklas Jansson

<b>>Sedan kan man skilja mellan olika typer av projekt. I grundkurser i programmering, där man i första hand skall lära sig hur programmering fungerar, ser jag inget hinder att öppna std globalt. Och jag uppfattade det som att trådskaparen ligger ungefär på eller strax ovanför denna nivå. I ett större projekt kan det vara en annan sak. </b>
Ja, det är klart att det är skillnad på nybörjarprojekt och mer komplicerade grejer. Men det handlar också om att ge en attityd. En person som inte är van vid att arbeta med namnrymder på annat sätt än att släppa upp dem kommer dra sig för att göra på annat sätt senare också.

När personen i fråga har kommit till projekt där namnrymder är ett perfekt sätt att hantera situationen så faller de istället tillbaka till gamla, dåliga metoder, som villkorlig kompilering, makron, etc.

<b>>Utveckla gärna vilket paradigmskifte du syftar på som förenklades genom införandet av namnrymder.</b>
Jag talar inte om ett paradigmskifte, jag kallade det för "paradigm" (med citationstecken), något så dramatiskt har naturligtvis inte hänt. Men den modulära programmeringen, bibliotekstänket, etc. underlättades radikalt. Hela iden med att det inte finns något "äkta globalt" har förstärkts.

Som exempel (se Bjarnes sida) kan man bygga en interpretator, helt funktionsorienterat, men ändå hålla det på samma effektiva modulära nivå som all OOP.


Svara

Sv:instack+exception

Postades av 2005-08-11 19:11:32 - Per Persson

Tack för förslaget att kolla på Bjarnes sida. Där hittade jag flera exempel där han själv använder <b>using namespace std</b> globalt. *he he* ;-)


<b>Som exempel (se Bjarnes sida) kan man bygga en interpretator, helt funktionsorienterat, men ändå hålla det på samma effektiva modulära nivå som all OOP.</b>

Det exemplet får du gärna ge en länk till.


Svara

Sv: instack+exception

Postades av 2005-08-11 22:20:48 - Niklas Jansson

Ja, det är jag fullt medveten om. Det glömde jag skriva i förra inlägget; att använda using namespace globalt är i princip bara till för två ändamål:
1. För att göra en mycket snabb konvertering av en gammal applikation till nya header-filer.
2. För exempel.

I exempel (som inte rör namnrymder) kan det bli plottrigt om man har med för mycket detaljer. Därför utesluter man ofta saker som namnrymder, felhantering, etc.

Det är möjligt att exemplet jag nämnde kom från Scott Meyers, men jag har för mig att det var Bjarnes. Hur som helst var det i princip en radda funktioner, grupperade i 3-4 namnrymder, med talande namn ("lexer", etc.). Den resulterande koden blev skitsnygg och enkel, och man såg tydligt att det var lätt att byta ut specifika komponenter.

EDIT:
För en bra genomgång av bla detta se Scott Meyers böcker, Effective C++-serien


Svara

Sv:instack+exception

Postades av 2005-08-12 10:21:54 - Niklas Jansson

Förresten, det sa jag nog inte.
Du verkar anse att std är en speciell namnrymd som alltid är ok att släppa eftersom den ändå är standard. Grejen är bara att det finns andra bibliotek som också lägger sig själva i std (även om det inte är en speciellt bra ide...).


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 617
27 953
271 709
5 720
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies