问题描述
要使用volk.h
,需要在一个编译单元中精确定义符号VOLK_IMPLEMENTATION
。
我有三个文件,main.cpp
,application.cpp
和application.h
这里是main.cpp
:
#include "application.h"
#include <stdexcept>
int main(int,char*[]) {
Application application;
try {
application.run();
} catch (std::runtime_error e) {
printf("%s/n",e.what());
return -1;
}
return 0;
}
这是application.h
的最上部分(这是VOLK_IMPLEMENTATION
出现的唯一文件):
#pragma once
#pragma warning(push,0)
#define VK_ENABLE_BETA_EXTENSIONS
#define VOLK_IMPLEMENTATION
#include "volk.h"
#pragma warning(pop)
最后,application.cpp
仅在最顶部包含application.h
,无论如何,其他都没关系。
上面的代码无法编译。它声称某些volk符号已经被定义。如果我从application.h中删除了VOLK_IMPLEMENTATION
,那么它就不会编译,因为根本没有定义符号。
但是,如果我将volk包含项移至main.cpp
,则一切正常。但是,我不需要在main中添加volk,也不想在其中包含它。
为什么会这样?
是main.cpp
一个编译单元,另一个是application.h/cpp
,但是由于application.h
中包含main.cpp
,所以它被添加到两个编译单元中,因此添加了{{1} }两次定义了volk.h
?如何处理呢?
每次我认为我想出了包含系统时,都会发生类似的情况。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)