digitalmars.D.learn - Create a class
- Ty Tower (102/102) Feb 01 2008 I am trying to create a Transaction class that I can call a blank transa...
- Sergey Gromov (10/14) Feb 01 2008 This is called a module, not a class file. To compile a module you must
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;
}
}
----------------------------------------------------------------------------------------------------------
Feb 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
Feb 01 2008








Sergey Gromov <snake.scaly gmail.com>