digitalmars.D - Initializing variables within classes
- jicman <jicman_member pathlink.com> Mar 13 2005
- J C Calvarese <jcc7 cox.net> Mar 13 2005
- jicman <jicman_member pathlink.com> Mar 14 2005
- Ben Hinkle <Ben_member pathlink.com> Mar 13 2005
- "Andrew Fedoniouk" <news terrainformatica.com> Mar 13 2005
- jicman <jicman_member pathlink.com> Mar 14 2005
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.
Mar 13 2005
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/
Mar 13 2005
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/
Mar 14 2005
|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; |}
Mar 13 2005
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.
Mar 13 2005
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.
Mar 14 2005









jicman <jicman_member pathlink.com> 