Affectation Void à une entité

12 views
Skip to first unread message

Jocelyn Batton

unread,
Jul 8, 2012, 7:06:59 AM7/8/12
to Groupe des Eiffelistes Francophones
Bonjour à tous,

J'ai le code suivant pour une de mes classes :

deferred class
LOCATION[G -> PIECE]

feature
put(p : G)
-- ajouter une piece
do
puted_piece := p
ensure
puted_piece = p
end

-- piece mise sur l'emplacement
puted_piece : G

empty
-- vider l'emplacement (retirer la piece s'il y en a une)
do
puted_piece := Void
ensure
puted_piece = Void
end

is_putable(p : G) : BOOLEAN
-- Peut-on mettre cette pièce sur cet emplacement ?
deferred
end

end

Seulement voilà...lorsque que je compile j'ai ce message d'erreur :

Error code: VJAR

Type error: source of assignment is not compatible with target.
What to do: make sure that type of source (right-hand side)
is compatible with type of target.

Class: LOCATION [G -> PIECE]
Feature: empty
Target name: puted_piece
Target type: Generic #1
Source type: [detachable] NONE
Line: 24
do
-> puted_piece := Void
ensure

Alors je me dis que c'est peut-être un problème de detachable dû au
void-safety d'Eiffel et je tente : "LOCATION[G -> detachable PIECE]"
et "puted_piece : detachable G".

Mais rien n'y fait...j'ai toujours le même message.

Serait-ce une erreur d'étourderie, quelque chose d'extrêmement simple
que j'aurais omis ?

Merci d'avance.

Jocelyn Batton

Eric Bezault

unread,
Jul 8, 2012, 9:17:25 AM7/8/12
to groupe_eiffelis...@googlegroups.com, Jocelyn Batton
Je te conseille d'essayer:

puted_piece : detachable G

avec:

deferred class
LOCATION [reference G -> PIECE]

Il faut en effet non-seulement indiquer au compilateur
que `puted_piece' peut etre void (mot clef 'detachable')
mais aussi que le parametre generique ne sera pas
expanded (mot clef 'reference').

--
Eric Bezault
mailto:er...@gobosoft.com
http://www.gobosoft.com


On 7/8/2012 1:06 PM, Jocelyn Batton wrote:
> deferred class
> LOCATION[G -> PIECE]
>
> feature
> put(p : G)
> -- ajouter une piece
> do
> puted_piece := p
> ensure
> puted_piece = p
> end
>
> -- piece mise sur l'emplacement
> puted_piece : G
>
> empty
> -- vider l'emplacement (retirer la piece s'il y en a une)
> do
> puted_piece := Void
> ensure
> puted_piece = Void
> end
>
> is_putable(p : G) : BOOLEAN
> -- Peut-on mettre cette pi�ce sur cet emplacement ?
> deferred
> end
>
> end





Jocelyn Batton

unread,
Jul 8, 2012, 11:31:16 AM7/8/12
to Eric Bezault, groupe_eiffelis...@googlegroups.com
Super ça marche !
Merci beaucoup Eric.

Jocelyn Batton

        -- Peut-on mettre cette pièce sur cet emplacement ?
        deferred
        end

end






David Le Bansais

unread,
Jul 8, 2012, 1:21:13 PM7/8/12
to groupe_eiffelis...@googlegroups.com, Eric Bezault
Comment, le tutoriel ne sera pas void-safe ? C'est mal !

David Le Bansais

Eric Bezault

unread,
Jul 8, 2012, 1:42:05 PM7/8/12
to David Le Bansais, groupe_eiffelis...@googlegroups.com
On 7/8/2012 7:21 PM, David Le Bansais wrote:
> Comment, le tutoriel ne sera pas void-safe ? C'est mal !

Est-ce que j'ai ecrit quelque chose qui indiquerait que
ce n'est pas void-safe?
Reply all
Reply to author
Forward
0 new messages