Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Calling global function causing linking error.

Calling global function causing linking error.

Scheduled Pinned Locked Moved C / C++ / MFC
questionc++data-structurestoolshelp
12 Posts 6 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P prasad_som

    Comp_Users wrote:

    I have an .cpp file which contains a set of utility functions like TrimMyString() etc which could be called a lot of times.

    I assume you have declared its prototypes in a header file, and are using it wherever that function in needed , isn't it ?

    C Offline
    C Offline
    Comp_Users
    wrote on last edited by
    #3

    No. I am not. I just have the global function body in the .cpp file and including this file in places where I am calling it.

    P C 2 Replies Last reply
    0
    • C Comp_Users

      No. I am not. I just have the global function body in the .cpp file and including this file in places where I am calling it.

      P Offline
      P Offline
      prasad_som
      wrote on last edited by
      #4

      Comp_Users wrote:

      I just have the global function body in the .cpp file and including this file in places where I am calling it.

      You should not include cpp file in other files. Do , what I said in my first post.

      C 1 Reply Last reply
      0
      • C Comp_Users

        No. I am not. I just have the global function body in the .cpp file and including this file in places where I am calling it.

        C Offline
        C Offline
        CPallini
        wrote on last edited by
        #5

        Comp_Users wrote:

        I just have the global function body in the .cpp file and including this file in places where I am calling it.

        :omg: You really need a good C tutorial. :)

        If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
        This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
        [My articles]

        C 1 Reply Last reply
        0
        • P prasad_som

          Comp_Users wrote:

          I just have the global function body in the .cpp file and including this file in places where I am calling it.

          You should not include cpp file in other files. Do , what I said in my first post.

          C Offline
          C Offline
          Comp_Users
          wrote on last edited by
          #6

          Tried what you asked me to do. Created a new .h file and added the function declarations in the global space in the .h file and in the utility .cpp file, included this newly created .h file. Now in the .cpp file where i am calling these utility functions, I have included the newly added .h file. But the error still persists. These are the exact error messages.

          1>XMLLoader.obj : error LNK2005: "void __cdecl TrimString(wchar_t *)" (?TrimString@@YAXPA_W@Z) already defined in UtilityFunctions.obj

          1>Output/Sample.dll : fatal error LNK1169: one or more multiply defined symbols found

          C 1 Reply Last reply
          0
          • C CPallini

            Comp_Users wrote:

            I just have the global function body in the .cpp file and including this file in places where I am calling it.

            :omg: You really need a good C tutorial. :)

            If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
            This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
            [My articles]

            C Offline
            C Offline
            Comp_Users
            wrote on last edited by
            #7

            Could you please tell me as to what is causing this to happen? Is it the way I am calling an global function? Pls help.

            D 1 Reply Last reply
            0
            • C Comp_Users

              Tried what you asked me to do. Created a new .h file and added the function declarations in the global space in the .h file and in the utility .cpp file, included this newly created .h file. Now in the .cpp file where i am calling these utility functions, I have included the newly added .h file. But the error still persists. These are the exact error messages.

              1>XMLLoader.obj : error LNK2005: "void __cdecl TrimString(wchar_t *)" (?TrimString@@YAXPA_W@Z) already defined in UtilityFunctions.obj

              1>Output/Sample.dll : fatal error LNK1169: one or more multiply defined symbols found

              C Offline
              C Offline
              Cedric Moonen
              wrote on last edited by
              #8

              Did you put include guards[^] in your header file ? Otherwise it will be included multiple times.

              Cédric Moonen Software developer
              Charting control [v1.5] OpenGL game tutorial in C++

              1 Reply Last reply
              0
              • C Comp_Users

                Could you please tell me as to what is causing this to happen? Is it the way I am calling an global function? Pls help.

                D Offline
                D Offline
                David Crow
                wrote on last edited by
                #9

                Comp_Users wrote:

                Could you please tell me as to what is causing this to happen?

                The linker is telling you exactly what the problem is. You need to put the function declarations in a .h file like:

                #if !defined(ABC123)
                #define ABC123

                #pragma once

                int TrimMyString();
                int PaintMyHouse();
                int SellMyStock();

                #endif

                You need to put the function definitions in a .cpp file. Make sure both files are added to the project. Then in any file that will be using those functions, simply #include the .h file near the top.

                "Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown

                "The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch

                1 Reply Last reply
                0
                • C Comp_Users

                  Hi, In my project, I have an .cpp file which contains a set of utility functions like TrimMyString() etc which could be called a lot of times. I have made these functions global and included the .cpp file in places where I call these utility functions. When I call these global methods from another function in my user defined class (say I want to trim a character array in one of my user defined class functions), I am getting a linking error "fatal error LNK1169: one or more multiple defined symobls found". However, when I make them global and static by including the static keyword, then this error no longer exists and every thing works perfectly. How do i make this a non-static global function because this is what the current requirment is? Thanks.

                  I Offline
                  I Offline
                  Iain Clarke Warrior Programmer
                  wrote on last edited by
                  #10

                  Others have beaten you over the head with it, so I'll join in. You DON'T include cpp files - you include headers. Try:

                  // TrimMyString.h
                  extern CString TrimMyString (CString s); // this will be included everywhere you need it. Note the extern.

                  // TrimMyString.cpp
                  #include "stdafx.h" // I assume you're using VC++, in which you'll likely need this
                  #include "TrimMyString.h"

                  CString TrimMyString (CString s)
                  {
                  do stuff with the string...
                  return s;
                  }

                  // somefile.cpp
                  #include "stdafx.h" // I assume you're using VC++, in which you'll likely need this
                  #include #include "Other.h"
                  #include "TrimMyString.h" // <-- the important one!

                  BOOL SomeFunction ()
                  {
                  s = " Hello ";
                  s = TrimMyString (s);
                  return TRUE;
                  }

                  I hope that made a little sense, Iain.

                  Codeproject MVP for C++, I can't believe it's for my lounge posts...

                  C 1 Reply Last reply
                  0
                  • I Iain Clarke Warrior Programmer

                    Others have beaten you over the head with it, so I'll join in. You DON'T include cpp files - you include headers. Try:

                    // TrimMyString.h
                    extern CString TrimMyString (CString s); // this will be included everywhere you need it. Note the extern.

                    // TrimMyString.cpp
                    #include "stdafx.h" // I assume you're using VC++, in which you'll likely need this
                    #include "TrimMyString.h"

                    CString TrimMyString (CString s)
                    {
                    do stuff with the string...
                    return s;
                    }

                    // somefile.cpp
                    #include "stdafx.h" // I assume you're using VC++, in which you'll likely need this
                    #include #include "Other.h"
                    #include "TrimMyString.h" // <-- the important one!

                    BOOL SomeFunction ()
                    {
                    s = " Hello ";
                    s = TrimMyString (s);
                    return TRUE;
                    }

                    I hope that made a little sense, Iain.

                    Codeproject MVP for C++, I can't believe it's for my lounge posts...

                    C Offline
                    C Offline
                    Comp_Users
                    wrote on last edited by
                    #11

                    I have done exactly the same. But inspite of this, I keep getting the same link error. I am using VC++ project.

                    C 1 Reply Last reply
                    0
                    • C Comp_Users

                      I have done exactly the same. But inspite of this, I keep getting the same link error. I am using VC++ project.

                      C Offline
                      C Offline
                      Comp_Users
                      wrote on last edited by
                      #12

                      Problem solved. It was the exact problem that you guys had rigthly pointed out. Thanks a lot. :)

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups