• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
[C++] Gestire un programma con + file cpp
#1
Ciao ragazzi, avrei bisogno di un piccolo consiglio...Siccome non ho grosse conoscenze di C++, mi sono feramto su un problemino stupido...Come diavolo posso dividere le funzioni che ora sono tutte nel file principale in + file??

Cioè ad esempio io ora ho Main.cpp che contiene:

Codice:
#include "DarkGDK.h"

//Tutto l'elenco delle variabili globali

//L'elenco delle intestazioni delle funzioni tra cui ad esempio:
void MakeLevel(void);

//poi inizia la funzione main
void DarkGDK ( void )
{
  bla bla bla e ancora bla....
}
void MakeLevel(void)
{
  bla bla bla
}

Ecco io vorrei mettere ad esempio la funzione MakeLevel in un'altro file Level.cpp, ma come faccio poi per farla vedere al Main?? Ho provato in tutti i modi!!!!!Sad
Ho creato un file GestLevel.cpp (dove all'interno ho inserito la void MakeLevel) e un file GestLevel.h, importando poi nel main GestLevel.h...poi ho creato un file global.h dove ho dichiarato le variabili globali, ed ho importato questo file sia in GestLevel.cpp che in main.cpp, ma niente, ottengo degli errori dal linker....
 
Rispondi
#2
In questo modo:


File principale
Codice:
// main.cpp
#include "funzioni.h"
int main()
{
    funzione();
    return 0;
}

Prototipi di funzione e include
Codice:
// funzioni.h
#include<files_include>
void funzione();

Definizione funzioni
Codice:
// funzioni.cpp
#include "funzioni.h"
void funzione()
{
...
}
 
Rispondi
#3
(31-03-2011, 07:59 PM)steve Ha scritto: In questo modo:


File principale
Codice:
// main.cpp
#include "funzioni.h"
int main()
{
    funzione();
    return 0;
}

Prototipi di funzione e include
Codice:
// funzioni.h
#include<files_include>
void funzione();

Definizione funzioni
Codice:
// funzioni.cpp
#include "funzioni.h"
void funzione()
{
...
}

così è come avevo fatto io, ma mi da errore come dicevo sopra e non va!!! Sad sto sicuramente sbagliando qualche cosa...
 
Rispondi
#4
Questo l'ho testato e funziona

Codice:
// main.cpp
#include "funz.h"

int main()
{
    funzione();
    return 0;
}
Codice:
// funz.h
#include <iostream>
void funzione();
Codice:
// funz.cpp
void funzione()
{
    std::cout << "ciao";
}
 
Rispondi
#5
Ok, penso di avere capito dove sbagliavo....Siccome io devo utilizzare variabili globali, cioè viste sia dal main sia dalla function MakeLevel, le avevo dichiarate in un header chiamato global.h...poi sia nel main che nel file delle funzioni (GestLevel.h) avevo incluso tale file, ma ottenevo un errore del linker come dicevo...Allora ho risolto tenendo le dichiarazioni delle variabili globali nel main, e ridichiarandole ancora sul file GestLevel, ma con la direttiva extern...mi sembra di avere capito si faccia così, qualcuno mi conferma se è il modo corretto?? Big Grin
 
Rispondi
#6
Basta fare:

Codice:
// main.cpp
#include "global.h"

int main()
{
    std::cout << globale;
    return 0;
}
Codice:
// global.h
#include <iostream>
int globale = 10;
 
Rispondi
#7
(31-03-2011, 09:51 PM)steve Ha scritto: Basta fare:

Codice:
// main.cpp
#include "global.h"

int main()
{
    std::cout << globale;
    return 0;
}
Codice:
// global.h
#include <iostream>
int globale = 10;

ciao steve, io è così che avevo fatto, ma non c'era verso di farlo funzionare...mi andava in errore...Sadmi da errore il linker dicendo che le variaibli chye ho definito in global.h, sono già state definite in main.obj, ma in realtà io le ho tolte da la...non capisco...

EDIT: scusa steve, in realtà così come lo hai scritto tu mi funziona...non mi funziona quando io in GestLevel, creo la mia funzione MakeLevel, che va a utilizzare anch'essa la variabile globale...Io per fargliela riconoscere, anche in GestLevel scrivo #include"global.h"....non vorrei che il problema sia qui, perchè lui trova l'inclusione sia dal main che da qui, e quindi trova poi 2 volte la dichiarazione della variabile...ma come posso ovviare a questo problema???
Ho riprovato anche a fare il tutto al difuori del programma del gioco, ti riporto tutto i codice (poche righe) e l'errore che ottengo...:

Codice:
//function.cpp
#include"function.h"

int moltiplicaper2()
{
    return pippo*2;
}
Codice:
//function.h
#include "global.h"

int moltiplicaper2();
Codice:
//global.h

int pippo;
Codice:
//main.cpp


#include "global.h"
#include "function.h"

int main()
{
    pippo=10;
    
    return moltiplicaper2();
}
1>c:\users\federico\documents\visual studio 2008\projects\testtttttt\global.h(2) : error C2086: 'int pippo': ridefinizione

1> c:\users\federico\documents\visual studio 2008\projects\testtttttt\global.h(2): vedere la dichiarazione di 'pippo'


ma la cosa buffa è che ora l'errore è diverso, prima era il linker che mi dava errore....e se addirittura scrivo il main togliendo la direttiva #include "global.h"

mi da quest'altro errore:

1>main.obj : error LNK2005: "int pippo" (?pippo@@3HA) già definito in function.obj

proprio un errore dal linker!!!!! HuhHuh
HuhHuhHuh
 
Rispondi
#8
Steve, parlando anche con altri, sembra che l'unico modo per fare cio sia quello che dicevo ieri, ovvero dichiarare le variabili nel main, e poi ridichiararle anche nei file delle funzioni ma con l'istruzione extern e senza inizializzazione....perchè il problema nel fare come dicevi tu è proprio che il linker si ritrova ad allocare la stessa variabile 2 volte e quindi va in errore...
 
Rispondi
#9
Non so che dirti... mi capita raramente di far uso di variabili globali (solitamente uso i puntatori). Ho notato che se la dichiari costante (const int pippo =10Wink non segna errori.

Se con extern risolvi usa quello. Magari posta un codice d'esempio (tipo quelli sopra), potrebbe tornare utile.
 
Rispondi
#10
si hai ragione..allora ecco come ho risolto il problema:
Codice:
//main.cpp
#include "external_function.h"
int var_globale;
int main
{
   var_globale=10;
    return quadrato();
}

Codice:
//external_function.h

extern int var_globale;
int quadrato(void);

Codice:
//external_function.cpp
#include "external_function.h"

int quadrato(void)
{
   return var_global * var_global;
}
 
Rispondi
#11
meglio così!
Sono contento per te che tu abbia risolto il problema ^^
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
Thumbs Up Info programma linguaggio C ml94x 12 1,066 27-02-2017, 11:01 PM
Ultimo messaggio: ml94x
  File header del C MickeyCrashRayman 16 2,001 15-10-2011, 05:13 PM
Ultimo messaggio: steve
  Programma per trovare la media fra 10 numeri danieleplay 7 1,549 09-05-2011, 02:55 PM
Ultimo messaggio: danieleplay
  [C++] leggere e scrivere file steve 5 3,008 06-03-2011, 01:48 PM
Ultimo messaggio: Chicowolf

Vai al forum:


Browsing: 1 Ospite(i)