使用 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)
{
...
}
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)
{
...
}