Newsgroup: it.comp.lang.c++
Titolo: Error: Undefined symbol _main??

Che stress!!
Uso Borland Turbo c++ per win3.1 visual.
So solo aprire/chiudere file di testo e modificare stringhe (in Dos), questi
sorgenti  vengono compilati e inseriti automaticamente in una finestra
Windows (da Turbo) e cosě essendo Dos ma inseriti in Windows  non posso
nemmeno farli funzionare in Background , avrei bisogno di un compilatore DOS
ma con quelli che trovo in rete non riesco a compilarli.
Ragazzi non riesco a combinare niente, sono disperato!!
Esiste un anima buona che spieghi perché ottengo questo errore nel make/link
?
" Linker  Error: Undefined symbol _main in library file C:\TCWIN\LIB\CWS.LIB
in module WINMAIN "
Questo č il sorgente (naturalmente non l'ho scritto io):
#include <math.h>
#include <stdlib.h>
#define INPUTS    8
#define HIDDEN1   4
#define OUTPUTS   1
#define HIDDEN1_INDEX  (INPUTS)
#define OUTPUT_INDEX   (HIDDEN1_INDEX+HIDDEN1)
#define NUMNEURONS  (INPUTS+HIDDEN1+OUTPUTS)
static double NEURON[NUMNEURONS];
/* Weight arrays */
static const double W_In_H1[HIDDEN1][INPUTS+1] = {
 10000, -10000, -10000, 10000, -10000, -10000, 10000, 10000, 10000,
 -10000, -10000, -10000, -10000, 10000, 10000, 10000, -10000, -10000,
 -10000, -10000, -10000, 10000, 10000, 10000, -10000, 10000, 10000,
 -10000, 10000, -10000, -10000, -10000, -10000, 10000, -10000, -10000
 };
static const double W_H1_Out[OUTPUTS][HIDDEN1+1] = {
 -10000, -10000, -10000, 9154.98, -10000
 };
/* Scale factors */
static const double R_MIN[INPUTS+OUTPUTS] = {
 0, 0, 0, -319.367, -590.1, -319.367, -590.1, -6.6362, -10.17
 };
static const double R_MAX[INPUTS+OUTPUTS] = {
 1, 1, 1, 305.767, 420.6, 305.767, 420.6, 4.7967, 6.7
 };
static const double S_MIN[INPUTS+OUTPUTS] = {
 -1, -1, -1, -1, -1, -1, -1, -1, -10.17
 };
static const double S_MAX[INPUTS+OUTPUTS] = {
 1, 1, 1, 1, 1, 1, 1, 1, 6.7
 };
/* Nonlinearity functions */
static double sigmoid( double x ) { return(1.0/(1.0 + exp(-x))); }
static double ftanh( double x ) { return tanh( x ); }
static double gaussian( double x ) { return exp( -x*x/2 ); }
static double linear( double x ) { return x; }
/* Compute the network response
 * Arguments:
 *   inputs   pointer to (double) array containing the input values
 *   outputs  pointer to (double) array which receives the results
 * Return:
 *   NonZero (1) if successful, 0 if not.
 */
int eval_net(const double * inputs, double * outputs)
{ 
 double F; 
 int i,j; 
 /* Check for invalid arguments */ 
 if (inputs == NULL || outputs == NULL) 
     return 0; 
 /* Zero neuron sums */ 
 for (i=0;i<NUMNEURONS;i++) 
     NEURON[i] = 0.0; 
 /* Apply inputs */
 for (i=0;i<INPUTS;i++) 
 {
     F = (S_MAX[i]-S_MIN[i])/(R_MAX[i]-R_MIN[i]); /* scale factor */
     NEURON[i] = F * inputs[i] + S_MIN[i] - F * R_MIN[i]; 
 }
 /* Compute hidden layer #1 */
 for (i=0;i<HIDDEN1;i++) 
 {
     for (j=0;j<INPUTS;j++) 
     {
         NEURON[HIDDEN1_INDEX + i] += NEURON[j]*W_In_H1[i][j]; 
     }
     NEURON[HIDDEN1_INDEX + i] += W_In_H1[i][INPUTS]; /* BIAS */
     NEURON[HIDDEN1_INDEX + i] = sigmoid( NEURON[HIDDEN1_INDEX + i] ); 
 }
 /* Compute network outputs */
 for (i=0;i<OUTPUTS;i++) 
 {
     for (j=0;j<HIDDEN1;j++) 
     { 
          NEURON[OUTPUT_INDEX + i] += NEURON[HIDDEN1_INDEX + j]*W_H1_Out[i][j]; 
     }
     NEURON[OUTPUT_INDEX + i] += W_H1_Out[i][HIDDEN1]; /* BIAS */
     NEURON[OUTPUT_INDEX + i] = sigmoid( NEURON[OUTPUT_INDEX + i] ); 
 }
 /* Copy outputs to output array */ 
 for (i=0;i<OUTPUTS;i++) 
 {
     F = (R_MAX[i+INPUTS]-R_MIN[i+INPUTS])/(S_MAX[i+INPUTS]-S_MIN[i+INPUTS]); /* unscale factor */
     outputs[i] = F * NEURON[OUTPUT_INDEX + i] + R_MIN[i+INPUTS] - F * S_MIN[i+INPUTS]; 
 }
 return 1; 
 }


ICQ #34602650

 wrote in message
376A348A...@plangroup.it...


Fulvio.
La funzione main è il corpo del programma. E da questa funzione principale
ed essenziale che parte il flusso di istruzioni. Se non ci fosse main il
programma non esisterebbe semplicemente perchè non potrebbe compiere alcuna
azione.
Si definisce come
int main()
{
};
Comunque ti consiglio di affidarti ad un buon libro per apprendere le basi
della programmazione in C.
Ciao, Giuseppe

Scusa ma quel sorgente non l'ho scritto io, dovrebbe funzionare!? O forse è
un modulo da inserire!
Boh!
E questo esempio  perché non funziona ( indefinito simbolo "execve"  nel
modulo )
/* esempio execve */
#include <process.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[], char **envp)
{
  int i;
  printf("Command line arguments:\n");
  for (i=0; i < argc; ++i)
    printf("[%2d] : %s\n", i, argv[i]);
  printf("About to exec child with arg1 arg2 ...\n");
  execve("CHILD.EXE", argv, envp);
  perror("exec error");
  exit(1);
  return 0;
}
Comunque grazie.
Fulvio

Fulvio
Ciao, Giuseppe

Per me il c++ è un mezzo per manipolare stringhe non uno scopo, e per quello
lo uso da diversi anni senza problemi,  ora volevo fare qualcosa di più ma
non posso mettermi a studiarlo, già spengo il PC alla "mattina".
Comunque non posso aver sbagliato a scriverlo (con copia/incolla, è lo
stesso che a te funziona! ) peraltro ho provato diverse volte anche con
altri esempi di "exec.." ma ottengo sempre lo stesso errore....ho provato
anche a cambiare qualche opzione ma niente! Boh.
Comunque ti ringrazio ancora per l'interessamento.
Ciao Fulvio.
http://web.tiscalinet.it/furyo/
P.S: Usi anche tu Borland Turbo c++ Visual per win 31 ?

P.S: Usi anche tu Borland Turbo c++ Visual per win 31 ?
No, io utilizzo il Turbo C++ 1.01 per DOS.
Ciao, Giuseppe