Hirdetés

Új hozzászólás Aktív témák

  • jattila48

    aktív tag

    válasz nonsen5e #3826 üzenetére

    .hpp-be lehetőleg ne tegyél fv. vagy globális változó defíníciót (csak deklarációt), mert ezeket beinklúdolod a különböző fordítási egységekbe, amik le is fordulnak, de mindegyik object kódban megjelenik a beinklúdolt fv. kódja, amit a linker többszörös definíciónak vesz. Pl:
    //akarmi.hpp
    #ifndef _AKARMI_HPP_
    #define _AKARMI_HPP_
    int f(int x){
    return x;
    }
    #endif

    //akarmi1.cpp
    #include "akarmi.hpp"
    #include <stdio.h>
    int g(int x);
    void main(void){
    printf("%d",f(5));
    printf("%d",g(6));
    }

    //akarmi2.cpp
    #include "akarmi.hpp"
    int g(int x){
    return f(x);
    }

    Itt az akarmi1.cpp-be, és az akarmi 2.cpp-be is bekerül az f fv. kódja, linkeléskor pedig dupla definíció miatt hibát ad a linker. Helyesen az akarmi.hpp-be csak deklaráció kerül (fv. prototype)

    //akarmi.hpp
    #ifndef _AKARMI_HPP_
    #define _AKARMI_HPP_
    int f(int x);
    #endif

    és valamelyik .cpp állományba (akár új akarmi3.cpp-be) írod az f fv. definícióját.
    Remélem tudtam segíteni.

Új hozzászólás Aktív témák