Avatar billede michael_ingeman Nybegynder
08. januar 2001 - 09:55 Der er 1 kommentar

Brug af klasser (hvad er der galt her?)

Hejsa
Jeg har for første gang forsøgt at anvende klaser i VBScript, og ummidelbart er det jo ligetil. MEN...Der er jo altid et men. Jeg er stødt lidt på grund her. Jeg forsøger at give et heltal som parameter et sted hvor jeg mener det bør være et heltal, men får en fejlmeddelelse om at der mangler et objekt...

Jeg har lavet et par klasser: en simpel liste (IndexedList) og en Config klasse. I koden laver jeg et objekt af typen IndexedList som jeg senere populerer med Configobjekter som er oprettet ud fra data fra en DB. For at teste at det hele er gået godt forsøger jeg så at udskrive indholdet af listeobjektet ved hjælp af Configs accessormetoder. På et tidspunkt går det dog galt, og jeg får denne meddelelse:

Der opstod en Microsoft VBScript-kørselsfejl fejl ´800a01a8´

Et objekt er obligatorisk: ´rgList(...)´

/includes/classes.asp, linje 147

Det der refereres til er koden til IndexedList. Mere specifikt følgende linier:

public function getElement(iIndex)
set getElement = rgList(iIndex)
end function

Her forsøger jeg at tilgå et objekt gemt i rgList, som er et normalt array. Betyder fejlmeddelelsen at indholdet af rgList(iIndex) ikke er et objekt, eller betyder den at den vil have et objekt i stedet for iIndex som er et heltal? Eller er der noget helt andet galt?

Jeg har inkluderet nogle uddrag af koden som måske kan være behjælpelige til at give et bedre overblik over situationen.

På forhånd tak for hjælpen
Michael Ingeman


set objConfigList = new IndexedList

*** Der hentes nogle data fra DB og gem dem i resultsettet rsOps. ***

´ opret og populer objekterne
if not rsOps.EOF then
dim objConfig
set objConfig = new Config

while not rsOps.EOF
´ Initier objektet. Det samme objekt genbruges for at undgå et overhead
´ i forbindelse med oprettelse af objekter.
call objConfig.setID(rsOps(\"Op_OpsaetningID\"))
call objConfig.setName(rsOps(\"Op_Navn\"))
call objConfig.setSuperGroup(rsOps(\"Op_Niv1\"), rsOps(\"Op_Niv2\"), rsOps(\"Op_Niv3\"))

´ Gem opsætningen og inkrementer counteren.
call objConfigList.addElement(objConfig)

´ Gå videre til næste tuple.
rsOps.moveNext
wend

´ Da alle data er kopieret lukkes resultsettet og det midlertidige
´ Config objekt fjernes
rsOps.close
set objConfig = nothing
end if

´ udskriv indholdet af objekterne
dim objTemp, i
trace(\"\")
trace(\"Listing configurations\")
for i = 0 to objConfigList.getLastIndex()
objTemp = objConfigList.getElement(i)
trace(\"Name : \" & objTemp.getName())
trace(\"ID : \" & objTemp.getID())
trace(\"Supergroup : \" & objTemp.getSuperGroup())
trace(\"\")
next
end if

**************

´ klassedefinitioner

class IndexedList
private rgList()
private iMaxIndex

private function Class_Init()
iMaxIndex = -1
end function

public function addElement(objNewElement)
iMaxindex = iMaxIndex + 1
reDim preserve rgList(iMaxIndex)
set rgList(iMaxIndex) = objNewElement
end function

public function getElement(iIndex)
set getElement = rgList(iIndex)
end function
end class


Class Config
private strID
private strName
private strSuperGroupID

public function getID()
getID = strID
end function

public function getName()
getName = strName
end function

public function getSuperGroup()
getSuperGroup = strSuperGroupID
end function

public function setID(strTmpID)
strID = strTmpID
end function

public function setName(strTmpName)
strName = strTmpName
end function

public function setSuperGroup(strNiv1ID, strNiv2ID, strNiv3ID)
´ Her gennemgås ID´erne i omvendt rækkefølge, altså niv3, niv2, niv1.
´ Hvis
if isNull(strNiv3ID) then
if isNull(strNiv2ID) then
if isNull(strNiv1ID) then
Trace(\"Error: Configuration without a supergroup!!\")
else
setSuperGroup = strNiv1ID
end if
else
setSuperGroup = strNiv2ID
end if
else
setSuperGroup = strNiv3ID
end if
end function
end class
Avatar billede ortrak Nybegynder
09. januar 2001 - 23:32 #1
prøv at debugge ved at sætte et heltal ind i rgList. F.eks.
set getElement = rgList(1)


/ortrak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester