-1

I just started with C++ for some OpenGL applications and wanted to pack some monster functions into a util class so that my code remains clean. This is what I did:

  1. awesomeClass.h :

    #pragma once    
    class AwesomeClass    
    {    
    public:    
        static void do_something_awesome();    
    };    
    
  2. awesomeClass.cpp :

    #include "awesomeClass.h"    
    void do_something_awesome(){    
     //...    
    }    
    
  3. main.cpp :

    #include "awesomeClass.h"    
    int main(int argc, char** argv)    
    {    
        AwesomeClass::versuchen();    
        return 0;    
    }
    

Output:

Error   3   error LNK1120: 1 unresolved externals   \Visual Studio 2013\Projects\TestEnvironmment\Debug\TestEnvironmment.exe    TestEnvironmment

Error   2   error LNK2019: unresolved external symbol "public: static void __cdecl AwesomeClass::do_something_awesome(void)" (?do_something_awesome@AwesomeClass@@SAXXZ) referenced in function _SDL_main   \Visual Studio 2013\Projects\TestEnvironmment\TestEnvironmment\main.obj TestEnvironmment

What is wrong with that code? I mean it works when I paste everything in one file.

Mat
  • 202,337
  • 40
  • 393
  • 406
user1786193
  • 17
  • 1
  • 5

2 Answers2

5

You should write

void AwesomeClass::do_something_awesome(){... } 

Instead of

void do_something_awesome(){... } 

Otherwise the function you implement does not belong to the class.

kyflare
  • 864
  • 4
  • 9
3

You should write this if you want write do_something_awesome in separate cpp file.

void AwesomeClass::do_something_awesome(){    
 //...    
} 

Or you can use:

    #pragma once    
    class AwesomeClass    
    {    
    public:    
        static void do_something_awesome(){
        //code here
        }  

    };
Jablonski
  • 18,083
  • 2
  • 46
  • 47