Search code examples
c++lnk2019

Unresolved external symbol error using uint16_t c++


endianness.cpp

#include "endianness.h"

#include <cstdint>

 using namespace io;

 void switch_endianness(uint16_t* n)
 {
     *n = (*n >> 8) | (*n << 8);
 }

 void switch_endianness(uint32_t* n)
 {
     ...
 }

 void switch_endianness(uint64_t* n)
 {
     ...
 }

endianness.h

#ifndef ENDIANNESS_H
#define ENDIANNESS_H

#include <cstdint>


namespace io
{
    void switch_endianness(uint16_t* n);

    void switch_endianness(uint32_t* n);

    void switch_endianness(uint64_t* n);
}

#endif

Trying to test out my switch_endianness function in app.cpp, I get an unresolved symbol error:

LNK2019 unresolved external symbol "void __cdecl io::switch_endianness(unsigned short *)" (?switch_endianness@io@@YAXPEAG@Z) referenced in function main

app.cpp

#ifndef TEST_BUILD

#include <iostream>
#include "io/endianness.h"

int main(int argn, char** argv)
{
    std::uint16_t y = 0x0000;
    io::switch_endianness(&y);
    std::cout << y;
}

#endif

How I understand and read thus far, its a linking/reference problem. I think my code is fine and should compile and run as intended, I did 'include in project' to my endianness files, perhaps there is something trivial I'm missing or doing wrong with referencing? I really can't seem to solve this.


Solution

  • In my endianness.cpp file I changed the function declarations to include the folder directory it was in and now it works.. (As it was complaining about this in the header file not being able to find function definition)

     void io::switch_endianness(uint16_t* n)
     {
         ...
     }