Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
March 14, 2005 Initializing variables within classes | ||||
---|---|---|---|---|
| ||||
I have this class, |class HTTPCall |{ | char[] Method = null; | char[] HOST = null; | int PORT = 80; | char[] REQ = null; | char[] Separator = GetMIMESeparator(); | char[] HTTPbody = null; |} I am getting this error, 19:26:05.11>build FormMgr.d FormMgr.d(89): non-constant expression GetMIMESeparator() |char[] GetMIMESeparator() |{ | char[] sep = | "XXXXXXX---Separator---multi---mime---encoding---XXXXXX"; | return sep; |} There were other things here, but I made it as simple as above and it still fails. I know how I could go around this, but I want to have that value when I call a "new HTTPCall()". Is this possible? I was looking into the classes documentation, but some of those examples are not (according to me) what I am looking for. Oh yeah, I tried "static char[] sep = ...." and that didn't work either. Please help a poor D knowledgable man out. thanks. |
March 14, 2005 Re: Initializing variables within classes | ||||
---|---|---|---|---|
| ||||
Posted in reply to jicman | jicman wrote: > I have this class, > > |class HTTPCall > |{ > | char[] Method = null; > | char[] HOST = null; > | int PORT = 80; > | char[] REQ = null; > | char[] Separator = GetMIMESeparator(); > | char[] HTTPbody = null; > |} > > I am getting this error, > > 19:26:05.11>build FormMgr.d > FormMgr.d(89): non-constant expression GetMIMESeparator() > > |char[] GetMIMESeparator() > |{ > | char[] sep = > | "XXXXXXX---Separator---multi---mime---encoding---XXXXXX"; > | return sep; > |} > > There were other things here, but I made it as simple as above and it still > fails. I know how I could go around this, but I want to have that value when I > call a "new HTTPCall()". Is this possible? I was looking into the classes > documentation, but some of those examples are not (according to me) what I am > looking for. It sounds like you need to use a "constructor". In D, it's looks kind of like a function called "this". The constructor is called whenever you "new" an object. See if this code works... class HTTPCall { char[] Method; char[] HOST; int PORT; char[] REQ; char[] Separator; char[] HTTPbody; char[] GetMIMESeparator() { char[] sep = "XXXXXXX---Separator---multi---mime---encoding---XXXXXX"; return sep; } this() { Method = null; HOST = null; PORT = 80; REQ = null; Separator = GetMIMESeparator(); HTTPbody = null; } } There are more details available at http://www.digitalmars.com/d/class.html#constructors -- Justin (a/k/a jcc7) http://jcc_7.tripod.com/d/ |
March 14, 2005 Re: Initializing variables within classes | ||||
---|---|---|---|---|
| ||||
Posted in reply to jicman | >|class HTTPCall >|{ >| char[] Separator = GetMIMESeparator(); >|} >19:26:05.11>build FormMgr.d >FormMgr.d(89): non-constant expression GetMIMESeparator() It looks like the compiler isn't too creative when it comes to figuring out if something is constant. Will it one day be able to figure out if a return value from a function is constant? I don't know. I hope so because it would be nice. You should be able to write something like |private const char[] sep = | "XXXXXXX---Separator---multi---mime---encoding---XXXXXX"; |class HTTPCall |{ | char[] Separator = sep; |} |char[] GetMIMESeparator() |{ | return sep; |} |
March 14, 2005 Re: Initializing variables within classes | ||||
---|---|---|---|---|
| ||||
Posted in reply to jicman | use constructors for initializing fields by values know in runtime only: class HTTPCall { char[] Separator; this() // constructor { Separator = GetMIMESeparator(); } } Andrew. "jicman" <jicman_member@pathlink.com> wrote in message news:d12n1s$8to$1@digitaldaemon.com... > > I have this class, > > |class HTTPCall > |{ > | char[] Method = null; > | char[] HOST = null; > | int PORT = 80; > | char[] REQ = null; > | char[] Separator = GetMIMESeparator(); > | char[] HTTPbody = null; > |} > > I am getting this error, > > 19:26:05.11>build FormMgr.d > FormMgr.d(89): non-constant expression GetMIMESeparator() > > |char[] GetMIMESeparator() > |{ > | char[] sep = > | "XXXXXXX---Separator---multi---mime---encoding---XXXXXX"; > | return sep; > |} > > There were other things here, but I made it as simple as above and it > still > fails. I know how I could go around this, but I want to have that value > when I > call a "new HTTPCall()". Is this possible? I was looking into the > classes > documentation, but some of those examples are not (according to me) what I > am > looking for. > > Oh yeah, I tried "static char[] sep = ...." and that didn't work either. > > Please help a poor D knowledgable man out. > > thanks. > > |
March 14, 2005 Re: Initializing variables within classes | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrew Fedoniouk |
Thank Andrew. Sometimes I think I know English and I keep figuring out I don't. Thanks.
jic
Andrew Fedoniouk says...
>
>use constructors for initializing fields by values know in runtime only:
>
>class HTTPCall
>{
> char[] Separator;
>
> this() // constructor
> {
> Separator = GetMIMESeparator();
> }
>}
>
>Andrew.
>
>
>"jicman" <jicman_member@pathlink.com> wrote in message news:d12n1s$8to$1@digitaldaemon.com...
>>
>> I have this class,
>>
>> |class HTTPCall
>> |{
>> | char[] Method = null;
>> | char[] HOST = null;
>> | int PORT = 80;
>> | char[] REQ = null;
>> | char[] Separator = GetMIMESeparator();
>> | char[] HTTPbody = null;
>> |}
>>
>> I am getting this error,
>>
>> 19:26:05.11>build FormMgr.d
>> FormMgr.d(89): non-constant expression GetMIMESeparator()
>>
>> |char[] GetMIMESeparator()
>> |{
>> | char[] sep =
>> | "XXXXXXX---Separator---multi---mime---encoding---XXXXXX";
>> | return sep;
>> |}
>>
>> There were other things here, but I made it as simple as above and it
>> still
>> fails. I know how I could go around this, but I want to have that value
>> when I
>> call a "new HTTPCall()". Is this possible? I was looking into the
>> classes
>> documentation, but some of those examples are not (according to me) what I
>> am
>> looking for.
>>
>> Oh yeah, I tried "static char[] sep = ...." and that didn't work either.
>>
>> Please help a poor D knowledgable man out.
>>
>> thanks.
>>
>>
>
>
|
March 14, 2005 Re: Initializing variables within classes | ||||
---|---|---|---|---|
| ||||
Posted in reply to J C Calvarese |
Thanks JCC. That one may work, but these functions are in different files, so I just did the same what Andrew suggested and that worked.
thanks.
J C Calvarese says...
>
>jicman wrote:
>> I have this class,
>>
>> |class HTTPCall
>> |{
>> | char[] Method = null;
>> | char[] HOST = null;
>> | int PORT = 80;
>> | char[] REQ = null;
>> | char[] Separator = GetMIMESeparator();
>> | char[] HTTPbody = null;
>> |}
>>
>> I am getting this error,
>>
>> 19:26:05.11>build FormMgr.d
>> FormMgr.d(89): non-constant expression GetMIMESeparator()
>>
>> |char[] GetMIMESeparator()
>> |{
>> | char[] sep =
>> | "XXXXXXX---Separator---multi---mime---encoding---XXXXXX";
>> | return sep;
>> |}
>>
>> There were other things here, but I made it as simple as above and it still fails. I know how I could go around this, but I want to have that value when I call a "new HTTPCall()". Is this possible? I was looking into the classes documentation, but some of those examples are not (according to me) what I am looking for.
>
>It sounds like you need to use a "constructor". In D, it's looks kind of like a function called "this". The constructor is called whenever you "new" an object.
>
>See if this code works...
>
>class HTTPCall
>{
> char[] Method;
> char[] HOST;
> int PORT;
> char[] REQ;
> char[] Separator;
> char[] HTTPbody;
>
>
> char[] GetMIMESeparator()
> {
> char[] sep =
> "XXXXXXX---Separator---multi---mime---encoding---XXXXXX";
> return sep;
> }
>
>
> this()
> {
> Method = null;
> HOST = null;
> PORT = 80;
> REQ = null;
> Separator = GetMIMESeparator();
> HTTPbody = null;
>
> }
>}
>
>
>There are more details available at http://www.digitalmars.com/d/class.html#constructors
>
>--
>Justin (a/k/a jcc7)
>http://jcc_7.tripod.com/d/
|
Copyright © 1999-2021 by the D Language Foundation