February 13, 2014 Cannot resolve constant from package when used as initial parameter value | ||||
---|---|---|---|---|
| ||||
I recently started using that new feature "package.d". While writing codes today, I started seeing some errors. For illustration, I wrote a piece of code. I will list 3 different files here. File-Folder structure is below: ./app.d ./pipes/package.d ./pipes/namedpipe.d File: app.d ------------------- import pipes; void main(){} File: ./pipes/package.d ------------------- module pipes; public import pipes.namedpipe; public enum PIPE_BUF = 4096; File: ./pipes/namedpipe.d ------------------- module pipes.namedpipe; public int getPipeBufferSize(){ return pipes.PIPE_BUF; } public void foo( size_t a = pipes.PIPE_BUF ){} Situation is that if I do not define that "foo" function in namedpipe.d file, everything is fine. No error at all, and "getPipeBufferSize" function returns the value that comes from "pipes.PIPE_BUF". When the function "foo" is defined that takes pipes.PIPE_BUF as its initial value of parameter, following error is seen: pipes/namedpipe.d(7): Error: cannot resolve type for PIPE_BUF --- While writing this post, I discovered that in "pipes/package.d" file, if I define "PIPE_BUF" BEFORE the import command as below: module pipes; public enum PIPE_BUF = 4096; public import pipes.namedpipe; then there is no error at all. Is this intentional? As far as I remember, D compiler was finding definitions no matter later or before defined. |
February 18, 2014 Re: Cannot resolve constant from package when used as initial parameter value | ||||
---|---|---|---|---|
| ||||
Posted in reply to tcak | Where possible, the order of declaration in D should not matter. Consider filing a bug report about that if it doesn't exist yet.
--
Marco
|
Copyright © 1999-2021 by the D Language Foundation