PDA

View Full Version : [C]Visual Studio Collegamento di file Sorgenti


ohi
18-11-2010, 15:09
Ciao ho il seguente problema sto scrivendo del codice utilizzando Visual studio->linguaggio Progetto Console Win32, ho creato 2 file .c e un header .h, quando compilo il programma mi segnala

Errore 1 error LNK2005: _mostra già definito in Prova.obj

Errore 2 fatal error LNK1169: rilevato uno o più simboli definiti più volte C:\...\Prova.exe

Ho compilato lo stesso codice con Dev C++ e non ho trovato nessun errore. :doh:
Il programma funziona benissimo :help:

tomminno
18-11-2010, 16:48
Suppongo che entrambi i file .c includano lo stesso .h e il .h non abbia nè #pragma once nè #include guard giusto?

ohi
18-11-2010, 18:16
Un esempio sciocco:

// Esempio.h

extern int miavariabile;

void mostra();

//a.c

#include <stdio.h>


#include "Esempio.h"
#include "b.c"


int miavariabile;

int main()
{
printf("\t Inserisci valore per la variabile: \n \t");
scanf("%d", &miavariabile);
printf("\t Hai inserito:");
mostra();

return 0;
}

//b.c


#include <stdio.h>


#include "Esempio.h"
void mostra();

void mostra()
{
printf("\t %d \n" , miavariabile);
}


con Dev non mi da nessun problema

tomminno
18-11-2010, 19:59
con Dev non mi da nessun problema

Evidentemente DevC++ha la fama che merita.

Devi aggiungere all'inizio

#pragma once

oppure

#ifndef IDENTIFICATORE_UNIVOCO_PER_L_HEADER
#define IDENTIFICATORE_UNIVOCO_PER_L_HEADER
//Tutto il codice dell'header
#endif

ohi
19-11-2010, 10:03
Grazie per l'aiuto,

ho provato ad aggiungere #pragma once al .h

#pragma once
extern int miavariabile;

void mostra();

Però gli errori sussistono

Errore 2 error LNK2005: _mostra già definito in b.obj

Errore 3 fatal error LNK1169: rilevato uno o più simboli definiti più volte

tomminno
19-11-2010, 10:36
Scusa non ci avevo fatto caso: hai ridichiarato mostra nel file b.c.

ohi
19-11-2010, 11:53
Ti ringrazio nuovamente per l'aiuto e la pazienza nei miei confronti.

#include <stdio.h>


#include "Esempio.h"
// void mostra();

void mostra()
{
printf("\t %d \n" , miavariabile);
}

Ho provato anche in questo modo ma mi segnala ancora l'errore

tomminno
19-11-2010, 12:53
Aaaargh:

#include "b.c"


Si includono gli header non il codice.

ohi
20-11-2010, 11:57
:doh: Grazie per l'aiuto, risolto :)