Thread overview | ||||||
---|---|---|---|---|---|---|
|
November 11, 2015 Error: no property "someFont" for type int | ||||
---|---|---|---|---|
| ||||
I'm trying to build a small manga reader application (because why search the internet if you can build it yourself), using DSFML. However, I'm getting a weird compilation error that I can't decrypt. In directory.d: using style; (...) _text = new Text; with(_text) { setFont(Style.DirectoryFont); In style.d: module style; (...) public static class Style { private static Font _font; public static Font DirectoryFont() { if(!(_font is null)) return _font; _font = new Font; Load(_font); // Helper function that loads the font into _font return _font; } } I'm getting the error message that the compiler can't find source/directory.d(...) : Error: no property 'DirectoryFont' for type 'int'. When I change the line to actually contain the (iirc optional) brackets, the type changes to 'Style'. Am I missing something with regards to static classes and members in D? Thanks in advance. |
November 11, 2015 Re: Error: no property "someFont" for type int | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marco de Wild | On Wednesday, 11 November 2015 at 06:37:44 UTC, Marco de Wild wrote: > > In directory.d: > using style; This is not D. It should be giving you a compiler error. How are you compiling? Or did you type 'using' in the post by mistake? Anyway, what you want is: import style; > > In style.d: > module style; > (...) > public static class Style > { 'static class' has no meaning in module scope, only for inner classes. It's not the cause of your problem though. > > I'm getting the error message that the compiler can't find > source/directory.d(...) : Error: no property 'DirectoryFont' for type 'int'. > When I change the line to actually contain the (iirc optional) brackets, the type changes to 'Style'. Am I missing something with regards to static classes and members in D? > Thanks in advance. The error is likley because of a symbol conflict. Assuming that Text is from the module dsfml.text.graphics, it has an enum type named Style. There's an unfortunate issue in D that allows both of the following to compile: auto e1 = Text.Style.Regular; _text.Style.Regular; The latter should not be allowed, IMO, but it is what it is. So in your case, accessing your Style class in the scope of with(_text) is causing the compiler to find _text.Style. The solution is to use the FQN (Fully Qualified Name) on your Style inside the with, i.e. style.Style, or to drop the with altogether. |
November 11, 2015 Re: Error: no property "someFont" for type int | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Parker | On Wednesday, 11 November 2015 at 07:46:31 UTC, Mike Parker wrote:
> Text is from the module dsfml.text.graphics, it has an enum
And of course, I meant dsfml.graphics.text.
|
November 11, 2015 Re: Error: no property "someFont" for type int | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mike Parker | > This is not D. It should be giving you a compiler error. How are you compiling? Or did you type 'using' in the post by mistake? Anyway, what you want is: > > import style; > I indeed made a typo while typing the post (and also on various occasions while writing the program, but compiler errors fixed that). That's what you get for using C# at work. >> >> In style.d: >> module style; >> (...) >> public static class Style >> { > > 'static class' has no meaning in module scope, only for inner classes. It's not the cause of your problem though. Thanks for the heads up :) I figured it was about time to dust my D-skills. > > The error is likley because of a symbol conflict. Assuming that Text is from the module dsfml.text.graphics, it has an enum type named Style. There's an unfortunate issue in D that allows both of the following to compile: > > auto e1 = Text.Style.Regular; > _text.Style.Regular; > > The latter should not be allowed, IMO, but it is what it is. So in your case, accessing your Style class in the scope of with(_text) is causing the compiler to find _text.Style. The solution is to use the FQN (Fully Qualified Name) on your Style inside the with, i.e. style.Style, or to drop the with altogether. Dropping the with worked like a charm, thanks a lot for the fast reply! |
Copyright © 1999-2021 by the D Language Foundation