February 01, 2008
I am trying to create a Transaction class that I can call a blank transaction when needed and fill in the fields then write it to a file .Then I  get the next new one and so on.

The below compiles an object file but gets stuck in the linker with this message
It goes OK if I put a "main" in it but I didn't think I had to have a main in a class file?
-----------------------------------------------------------------------------------------------------------
[tytower@localhost TangoExamples]$ dmd ./Transaction.d
gcc Transaction.o -o Transaction -m32 -Xlinker -L/usr/local/bin/../lib -ltango-user-dmd -ltango-base-dmd -lpthread -lm
/usr/local/bin/../lib/libtango-base-dmd.a(dmain2.o): In function `_D6dmain24mainUiPPaZi7runMainMFZv':
dmain2.d:(.text._D6dmain24mainUiPPaZi7runMainMFZv+0x10): undefined reference to `_Dmain'
/usr/local/bin/../lib/libtango-base-dmd.a(deh2.o): In function `_D4deh213__eh_finddataFPvZPS4deh213DHandlerTable':
deh2.d:(.text._D4deh213__eh_finddataFPvZPS4deh213DHandlerTable+0x9): undefined reference to `_deh_beg'
deh2.d:(.text._D4deh213__eh_finddataFPvZPS4deh213DHandlerTable+0xe): undefined reference to `_deh_beg'
deh2.d:(.text._D4deh213__eh_finddataFPvZPS4deh213DHandlerTable+0x14): undefined reference to `_deh_end'
deh2.d:(.text._D4deh213__eh_finddataFPvZPS4deh213DHandlerTable+0x37): undefined reference to `_deh_end'
collect2: ld returned 1 exit status
--- errorlevel 1

------------------------------------------------------------------------------------------------------------
import tango.io.Stdout;
import tango.io.File;
import tango.core.Exception;
import tango.util.Convert;

class Transaction {
  public int m_Number;

    int getNumber() {
        char[] input = cast(char[])File("number.int").read;
	Stdout.formatln("input array data  = {}",input[]);
	int m_Number = to!(int)(input);
	if(m_Number){
          ++ m_Number  ;
	  Stdout("It's transaction Number is ",m_Number).newline;
	}else {
	   ++ m_Number;
	   Stdout("New, first transaction number", m_Number).newline;}
	return 	m_Number;
			    }

  char[][] readFile() {
	 auto content = cast(char[][]) File("outfile.txt").read;
	Stdout.formatln("Transaction data number is {}",content[0]);
	Stdout.formatln("Transaction date is {}",content[1]);
	Stdout.formatln("Transaction description is {}",content[2]);
	Stdout.formatln("Transaction code is {}",content[3]);
	Stdout.formatln("Transaction debit amount is {}",content[4]);
	Stdout.formatln("Transaction credit amount is {}",content[5]);

	Stdout("Successfully read file 'outfile.txt'").newline;
	return content;
		 }

  void writeNo(int docno) {
        auto output = new File ("number.int");
	try{
	void[] y = to!(char[])(docno);
	output.write(y);
	Stdout("Successfully over-wrote to  file 'number.int'").newline;
	}
	  catch (AddressException xy)
	{
	    Stdout("A file exception occured: " ~ xy.toString()).newline;
	}
	 }


  void writeFile(char[][] content) {
        auto output = new File ("outfile.txt");
	try{
	output.write(content);
	Stdout("Successfully over-wrote to  file 'outfile.txt'").newline;
	}
	  catch (AddressException xy)
	{
	    Stdout("A file exception occured: " ~ xy.toString()).newline;
	}
	 }

    void printArray(char[][]args ){
        Stdout.formatln("In array args index 0= {}",args[0]);
	Stdout.formatln("In array args index 1= {}",args[1]);
	Stdout.formatln("In array args index 2= {}",args[2]);
	Stdout.formatln("In array args index 3= {}",args[3]);
	Stdout.formatln("In array args index 4= {}",args[4]);
	Stdout.formatln("In array args index 5= {}",args[5]); }

    this() {
	char[][] data ;
	char[] docno = to!(char[])(getNumber);
	char[] date  ;
	char[] m_details ;
	char[] m_code  ;
	char[] m_debit ;
	char[] m_credit;

	data ~= docno;     //this is an append operator ~ ?
	data ~= date ;
	data ~= m_details;
	data ~= m_code;
	data ~= m_debit;
	data ~= m_credit;

	Stdout("Created a transaction.").newline;
	printArray(data);
	writeNo(to!(int)(docno)) ;
	writeFile(data);
	}
    ~this() {
        Stdout("Destroyed this transaction.").newline;
	    }
	}
----------------------------------------------------------------------------------------------------------

February 01, 2008
Ty Tower Wrote:

> I am trying to create a Transaction class that I can call a blank transaction when needed and fill in the fields then write it to a file .Then I  get the next new one and so on.
> 
> The below compiles an object file but gets stuck in the linker with this message
> It goes OK if I put a "main" in it but I didn't think I had to have a main in a class file?

This is called a module, not a class file.  To compile a module you must use '-c' switch, just like in C:

dmd -c Transaction.d

which will give you a Transaction.o (or .obj) file to link with later.  Or, if your project is small, you can supply all the files to the compiler:

dmd App.d Transaction.d Other.d

with only one of the modules containing main(), which results in
App (or App.exe).

SnakE