Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012

    [C++] Problema con codice multifile

    Ho un progetto dove, in main.cpp, uso delle funzioni dichiarate in Algoritmi.cpp .
    Siccome dovrebbe pensarci il linker a capire che funzioni uso, non servirebbe includere Algoritmi.cpp in main.cpp; il problema è che in main.cpp mi servo degli indirizzi delle funzioni di Algoritmi.cpp!
    Ma se lo includo, mi dà giustamente errore perchè le "ridefinisco".

    Come posso risolvere?

  2. #2
    la butto li...

    includi il file... pero' usi gli #ifdef
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Credo che il problema si risolva facendo uso del makefile. Il makefile è un file particolare che "istruisce" il compilatore ed linker in fase di compilazione e di linking.

    Non sono pratico dei makefile, ma se cerchi su google sicuramente trovi qualcosa.

    Questo è un esempio di un makefile che abbiamo usato noi per la complazione di un progetto in C che faceva uso di più file che richiamavano, fra di loro, funzioni:
    codice:
    smallshell: userin.o runcommand.o procline.o
    	cc -o smallshell userin.o runcommand.o procline.o
    userin.o : userin.c smallsh.h
    	cc -c  userin.c
    runcommand.o : runcommand.c smallsh.h
    	cc -c  runcommand.c
    procline.o  : procline.c smallsh.h
    	cc -c  procline.c
    Da quello che ricordo, sulla prima linea si dice quale sia il progetto che verrà compilato (in questo caso viene prodotto un file eseguibile che si chiama smallshell), facendo uso dei codici oggetto prodotti dalle compilazioni elencate nelle righe successive.

    Per effettuare la compilazione si usa il comando make dalla posizione in cui si trova il makefile (make si arrangia a leggere il file "makefile" e ad eseguire la compilazione).

    Di più nin zò

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Crea un file Algoritmi.h con i prototipi (dichiarazioni) delle funzioni in Algoritmi.cpp che vuoi siano utilizzabili dagli altri moduli.

    Nel main.cpp includi i prototipi
    codice:
    #include "Algoritmi.h"
    Una nota se in Algoritmi.cpp definisci dei tipi es

    codice:
    typedef struct {
      ...
    } coda;
    e hai una funzione che ne fa uso es:

    codice:
    void init(coda* c)
    {
      ...
    }
    allora in "Algoritmi.h" devi includere questi "include guards"

    codice:
    #ifndef _ALGORITMI_H_
    #define _ALGORITMI_H_
    
    typedef struct {
      ...
    } coda;
    
    void init(coda* c);
    
    #endif // _ALGORITMI_H_
    Inoltre se usi gcc usa il flag -Wall che ti segnalerà tutti i warning tra cui la mancanza delle dichiarazioni delle funzioni che usi, header file mancanti e altro, altrimenti anche se riesci a compilare e linkare, poi salteranno fuori errori a run-time.

  5. #5
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    OK ho risolto creando un file header con i prototipi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.