使用 uint16_t c++ 未解决的外部符号错误

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

尝试在 app.cpp 中测试我的 switch_endianness 函数时,出现未解析的符号错误:

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

到目前为止,我是如何理解和阅读的,这是一个 linking/reference 问题。我认为我的代码很好,应该按预期编译和 运行,我对我的 endianness 文件做了 'include in project',也许我遗漏了一些微不足道的东西或在引用时做错了?我似乎真的无法解决这个问题。

在我的 endianness.cpp 文件中,我更改了函数声明以包含它所在的文件夹目录,现在它可以工作了..(因为它在头文件无法找到函数定义)

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