我在我的cmake(3.14)项目中添加了一个新的枚举类,遇到链接器错误(LNK2019)。单独地,项目在VS中编译,但是在链接主exe时失败。 这是枚举def:
#ifndef VERTEXBUFFERMODE_H
#define VERTEXBUFFERMODE_H
enum class BufferMode
{
SingleCopy,
InstanceCopy
};
#endif
我可以通过实例化枚举来解决此问题:
#ifndef VERTEXBUFFERMODE_H
#define VERTEXBUFFERMODE_H
enum class BufferMode
{
SingleCopy,
InstanceCopy
} BuffMode;
#endif
但是,我收到了链接器警告LNK4006,它已定义。尽管链接成功,但我宁愿没有它。 在我的CMakeLists.txt中,我已链接了定义枚举的项目(Core.Graphics):
target_link_libraries(ExperimentalEngine Core.Graphics基础结构 $ {ALL_LIBS} )
更新并显示确切的错误消息:
严重性代码描述项目文件行抑制状态 错误LNK2019无法解析的外部符号“ public:枚举BufferMode __cdecl VertexBuffer :: bufferMode(void)“(?bufferMode @ VertexBuffer @@ QEAA?AW4BufferMode @@ XZ)在 函数“私有:void __cdecl VertexArray :: drawArrays(class VertexBuffer *)“ (?drawArrays @ VertexArray @@ AEAAXPEAVVertexBuffer @@@ Z)ExperimentEngine C:\ work \ temp \ experimentalengine \ Core.Graphics.lib(VertexArray.obj)1
我认为这与我在cmake中未正确设置某些内容有关。有什么想法吗?
答案 0 :(得分:2)
LNK2019
错误消息与您的枚举类无关。
该错误消息表明您没有BufferMode bufferMode(void)
的公用方法VertexBuffer
的定义。您只声明了它,但从未添加它的实现。
(public: enum BufferMode __cdecl VertexBuffer::bufferMode(void)
)。
由于drawArrays
尝试使用bufferMode
而发生错误。
(referenced in function "private: void __cdecl VertexArray::drawArrays(class VertexBuffer *)
)
写作:
enum class BufferMode
{
SingleCopy,
InstanceCopy
} BuffMode;
无法解决LNK2019
错误,它引入了一个新错误。因此,将} BuffMode;
恢复为};
。并为bufferMode(void)
添加缺少的定义。
包含注释的整个错误消息:
Error LNK2019
unresolved external symbol
"public: enum BufferMode __cdecl VertexBuffer::bufferMode(void)" // human readable version of the name
(?bufferMode@VertexBuffer@@QEAA?AW4BufferMode@@XZ) // mangled version of the name above
referenced in function
"private: void __cdecl VertexArray::drawArrays(class VertexBuffer *)" // human readable version of the name
(?drawArrays@VertexArray@@AEAAXPEAVVertexBuffer@@@Z) // mangled version of the name above
ExperimentalEngine
C:\work\temp\experimentalengine\Core.Graphics.lib
(VertexArray.obj) // the translation unit for which the error occured
1