"在QtCreator项目中找不到架构x86_64的符号"

Mai*_*tor 22 c++ qt compiler-errors

我收到了错误

Symbol(s) not found for architecture x86_64
Run Code Online (Sandbox Code Playgroud)

试图在QtCreator上编译一个项目.当我尝试创建用户定义类的实例时,会发生这种情况Layer.该类由标题layer.h和实现组成layer.cpp.它经过测试并可在其他程序中使用.在我的项目中,它包含在内,qtwidget.h当我尝试使用它时会发生错误qtwidget.cpp.例如:

Layer<double> text("pq.txt",0.5,0.5,0.5);
Run Code Online (Sandbox Code Playgroud)

启用此行qtwidget.cpp足以显示错误.

这是一个普遍的错误,我对如何进一步隔离它一无所知,但如果它有所帮助,我已将整个项目包含在这个git repo中.

The*_*ght 47

在我看来,Qt Creator显示的错误信息在您理解之前是相当误导的,但不会阻止将模板类拆分为标题和实现文件.如果你想一下这条消息:

Symbol(s) not found for architecture x86_64
Run Code Online (Sandbox Code Playgroud)

我最初想到的问题是,它在问题输出中自己说明了这个错误,并且可能导致用户认为问题是由于体系结构造成的.实际上,它的所有说法都是有一个定义的符号(通常是函数),找不到匹配的实现.

如果从" 问题"更改为" 编译输出"窗口并向上滚动,您将能够确切地看到无法找到哪些符号; 我的用红色显示.令人讨厌的是,在" 问题"视图中没有显示缺失符号的详细信息.

只需在函数头中添加一个函数定义并且不实现该函数就可以很容易地复制这个错误,从.cpp文件中调用它.然后,您将在"问题"窗口中看到类似的内容

找不到符号

切换到"编译输出"视图并向上滚动显示:

在此输入图像描述

所以现在我们看到实际的问题是,从构造函数PGGui :: PGGui调用了名为PGGui的类中的函数DoSomeStuff,但是由于找不到符号,因此缺少DoSomeStuff的主体.


Mai*_*tor 8

幸运的是,我已经设法在任何答案之前解决了我的问题,所以,如果有人遇到类似的问题,问题是你似乎无法将模板化的类拆分为.cpp和.h文件.将.cpp文件的所有声明放回到.h解决问题中.

但是我仍然有一个遗留问题:重复的符号(这就是我分裂它的原因).这一次,变量声明为external.h和重新声明它没有external一个(也是唯一一个)关键字.cpp文件解决问题为好.