Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] Errore in fase di link

    Cerco di spiegarvi un attimo la situazione.
    Compilando un progetto in Visual C++, ricevo un errore, il seguente:
    codice:
    1>Collegamento in corso...
    1>Silhouette.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,
    class std::allocator<char> > __cdecl lower_string(class std::basic_string<char,struct std::char_traits<char>,
    class std::allocator<char> > const &)" (?lower_string@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV12@@Z) 
    già definito in FunzionePeso.obj
    1>Funzione Peso\Release\Funzione Peso.exe : fatal error LNK1169: rilevato uno o più simboli definiti più volte
    Cerco ora di raccontarvi come sono strutturati i file.
    Il file che da errore, cioè quello in cui secondo me è il problema, è ObjRead.h
    Il main si trova in FunzionePeso.cpp, se qui dentro includo il file ObjRead.h non ho nessun errore e tutto funziona correttamente.
    Supponiamo che in FunzionePeso.cpp includa anche un altro file, denominato Silhouette.h, e che questo a sua volta includa ObjRead.h, ecco che qui si presenta il problema...
    Premetto che in ObjRead.h uso le direttive:
    codice:
    #ifndef
    #define
    #endif
    Un altra situazione in cui si presenta l'errore è la seguente: in FunzionePeso.cpp includo solo Silhouette.h (e non più ObjRead.h).
    In Silhouette.h resta incluso ObjRead.h. Anche in questo caso ho errore in fase di link.
    Non riesco a capire dove stia il problema, spero di essermi spiegato, al limite chiedete pure.
    Grazie!
    Enigma

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Forse dovresti postare il codice...
    è sicuramente un errore nell'impostare gli include
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Originariamente inviato da XWolverineX
    Forse dovresti postare il codice...
    è sicuramente un errore nell'impostare gli include
    Ok, cerco di definire come sono gli include e metto un link al codice in questione. Nella situazione che propongo abbiamo l'errore.
    - FunzionePeso.cpp
    codice:
    #include <GL/glut.h>
    #include "3DMath.h"
    #include "Silhouette.h"
    #include "ObjReader.h"
    - Silhouette.h
    codice:
    #ifndef _SILHOUETTE_H
    #define _SILHOUETTE_H
    #include "ObjReader.h"
    #endif
    Grazie!

    - 3DMath.h
    codice:
    #ifndef _3DMATH_H
    #define _3DMATH_H
    #include <cmath>
    #endif
    - ObjRead.h
    http://www.gamedev.net/community/for...12&gforum_id=0
    Il codice che utilizzo è presente a questo link, terzo post (objread.h), nel mio ho aggiunto solo qualche funzione e le seguenti direttive:
    codice:
    #ifndef _OBJREADER_H
    #define _OBJREADER_H
    #include "3DMath.h"
    #endif
    Enigma

  4. #4

  5. #5
    in ObjReader.h, prova a sostituire
    Codice PHP:
    string lower_string(const string &src_string
    con:
    Codice PHP:
    static string lower_string(const string &src_string
    non è la soluzione migliore ma potrebbe andare.

  6. #6
    Originariamente inviato da MacApp
    in ObjReader.h, prova a sostituire
    Codice PHP:
    string lower_string(const string &src_string
    con:
    Codice PHP:
    static string lower_string(const string &src_string
    non è la soluzione migliore ma potrebbe andare.
    Provando cosi funziona.
    Ho anche appena provato a risolvere in un altro modo, avendo in ObjReader.h non solo la definizione delle funzioni ma anche il corpo, ho aggiunto inline, solo alla prima quella che hai citato anche tu. Anche in questo modo funziona.
    Mi sapreste spiegare il perchè? Intendo perchè basta mettere inline alla prima funzione oppure lo static come hai proposto tu.
    Grazie.
    Enigma

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 © 2025 vBulletin Solutions, Inc. All rights reserved.