Infinit loop

wongtd wongtd at smm.com
Sun May 11 21:00:27 PDT 2008


Ary Borenszweig Wrote:

> wongtd escribió:
> > see this here
> > 
> > module Box; import dwt.DWT; import dwt.widgets.Composite; import dwt.widgets.Control; import dwt.widgets.Text; import dwt.widgets.Shell; import dwt.widgets.Display; import tango.io.Stdout; class Box {     private Control[char[]] controls; // Use associative array     this (Composite parent ,int style ) {     auto box = new Composite(parent,DWT.SINGLE);     box.setSize(700,40);     auto No = new Text(box,DWT.LEFT);     No.setBounds(1,15,10,15);     No.setText("");            auto Date = new Text(box,DWT.LEFT);     Date.setBounds( 21, 15, 60, 15);     Date.setText("");            auto Content   = new Text(box,DWT.LEFT);     Content.setBounds( 90, 15,70, 15);     Content.setText("");     box.setVisible = true;     controls["No"] = No;     controls["Date"] = Date;     controls["Content"] = Content;          box.setTabList(controls.values);   }   void setText(char[] name, char[] text)   {       controls[name].setText(text);    } } void main () {   Display display = new Display 
> ();   Shell shell = new Shell (display);   shell.setText("Boxes");      Box mybox1 = new Box(shell,DWT.SINGLE);   mybox1.setText("No","wire");   Box mybox2 = new Box(shell,DWT.SINGLE);   mybox2.setText("Content","Fishingline");   shell.pack();   shell.open();           while (!shell.isDisposed ()) {     if (!display.readAndDispatch ()) display.sleep ();   }   display.dispose (); } /*---------------------------------------------------------------------------- Box.d(44): Error: no property 'setText' for type 'dwt.widgets.Control.Control' Box.d(44): Error: function expected before (), not 1 of type int */
> 
> The formatted code is:
> 
> ---
> module Box;
> 
> import dwt.DWT;
> import dwt.widgets.Composite;
> import dwt.widgets.Control;
> import dwt.widgets.Text;
> import dwt.widgets.Shell;
> import dwt.widgets.Display;
> import tango.io.Stdout;
> 
> class Box {
> 	private Control[char[]] controls; // Use associative array
> 
> 	this(Composite parent, int style) {
> 		auto box = new Composite(parent, DWT.SINGLE);
> 		box.setSize(700, 40);
> 		auto No = new Text(box, DWT.LEFT);
> 		No.setBounds(1, 15, 10, 15);
> 		No.setText("");
> 		auto Date = new Text(box, DWT.LEFT);
> 		Date.setBounds(21, 15, 60, 15);
> 		Date.setText("");
> 		auto Content = new Text(box, DWT.LEFT);
> 		Content.setBounds(90, 15, 70, 15);
> 		Content.setText("");
> 		box.setVisible = true;
> 		controls["No"] = No;
> 		controls["Date"] = Date;
> 		controls["Content"] = Content;
> 		box.setTabList(controls.values);
> 	}
> 
> 	void setText(char[] name, char[] text) {
> 		controls[name].setText(text); // ** Here's the error **
> 	}
> }
> 
> void main() {
> 	Display display = new Display();
> 	Shell shell = new Shell(display);
> 	shell.setText("Boxes");
> 	Box mybox1 = new Box(shell, DWT.SINGLE);
> 	mybox1.setText("No", "wire");
> 	Box mybox2 = new Box(shell, DWT.SINGLE);
> 	mybox2.setText("Content", "Fishingline");
> 	shell.pack();
> 	shell.open();
> 	while(!shell.isDisposed()) {
> 		if(!display.readAndDispatch())
> 			display.sleep();
> 	}
> 	display.dispose();
> }
> ---
> 
> You are getting that error because the class Control doesn't have a 
> method named setText. You probably want to declare controls as follows:
> 
> private Text[char[]] controls; // Use associative array
> 
> (and probably use another name instead of controls)
> 
> > 
> > I play with and put in 
> > 
> > }
> > 
> >   void setText(char[] text)
> > { 
> >   setText(text);//dont understand why this does not cause infinite loop?
> > }
> 
> When you defined that method, did you invoke it? If not, that's why you 
> didn't get infinite loops. But you should, if you invoke it.
> 
> > 
> >   void setText(char[] name, char[]text)
> >   {
> > //   name.setText(text);
> >   }
> > }
> > 
> > with layout in shell above compiles and runs giving 9 text boxes with right text.
> > 
> > Question   When setText(name,text ) is called Why does setText(text) not cause infinit loop?
> 
> That's a different question. setText(name, text) and setText(text) are 
> different methods: two methods are considered the same if they have the 
> same name, same formal arguments, and same return type.
> 
> > It calls itself seems so
> > I tried to put in 'override' but would not compile
> 
> Because setText(char[] name, char[] text) is not a method of Object (the 
> class your Box is inheriting from). It wouldn't work either if you 
> extended from Text, because Text has the method setText(char[] text), 
> which is a different method than setText(char[] name, char[] text).


Ok file posted too but did not show only pasted contents direct here.

setText(name text)  calls (invokes) setText(text) which is method of Text. Box creates many Text objects , each has a setText(text) method .

Notice setText(text) calls itself ?


More information about the Digitalmars-d-learn mailing list