QT MainWindow的构造函数何时被调用中,调用自定义类导致“无法解析的外部符号”

解决VC2010下编译QT,提示无法解析外部符号的问题
编辑:www.fx114.net
本篇文章主要介绍了"解决VC2010下编译QT,提示无法解析外部符号的问题",主要涉及到解决VC2010下编译QT,提示无法解析外部符号的问题方面的内容,对于解决VC2010下编译QT,提示无法解析外部符号的问题感兴趣的同学可以参考一下。
问题现象:
1&------ 已启动全部重新生成: 项目: QT_RAD_HelloWorld, 配置: Debug Win32 ------
1&& Moc'ing mainwindow.h...
1&& Uic'ing mainwindow.ui...
1&& main.cpp
1&& mainwindow.cpp
1&& 正在生成代码...
1&mainwindow.obj : error LNK2001: 无法解析的外部符号 &public: virtual struct QMetaObject const * __thiscall MainWindow::metaObject(void)const & ()
1&mainwindow.obj : error LNK2001: 无法解析的外部符号 &public: virtual void * __thiscall MainWindow::qt_metacast(char const *)& ()
1&mainwindow.obj : error LNK2001: 无法解析的外部符号 &public: virtual int __thiscall MainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)& ()
1&E:\work\QT\study\zhangsk\QT_RAD_HelloWorld\\QT_RAD_HelloWorld.exe : fatal error LNK1120: 3 个无法解析的外部命令
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
发生该情况的说明:
原本可以编译的程序,在改动了slot内的代码后ReBuild出现该问题。
原因分析:
moc_mainwindow.cpp这类moc_开头的文件在VC下没有重新生成导致。
解决方法:
将Project中的Generated Files目录下的moc_mainwindow.cpp文件移除,再重新添加。
然后重新ReBuild即可。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:Qt 在VS下使用添加新类后报错LNK2019无法解析的外部符号解决办法 - CSDN博客
Qt 在VS下使用添加新类后报错LNK2019无法解析的外部符号解决办法
使用向导添加新类编译报错:
mainwindow.obj:-1: error: LNK2019: 无法解析的外部符号 &public: __thiscall Dialog1::Dialog1(class QWidget *)& (??0Dialog1@@QAE@PAVQWidget@@@Z),该符号在函数 &private: void __thiscall MainWindow::rightClickedOperation(void)& (?rightClickedOperation@MainWindow@@AAEXXZ) 中被引用
同样新建项目后把项目文件改目录再编辑也报错。
解决办法:删除调试文件夹build-Widget-Desktop_Qt_5_7_0_MSVC2013_32bit-Debug
重新编译即可Widget
本文已收录于以下专栏:
相关文章推荐
Qt开发中,当开了GUI中用到信号和槽,就需在.h文件中的类里写入Q_OBJECT宏。而任何含有Q_Object的类都必须使用Qt的moc工具生成对应的cpp文件,然后在项目里面包含这个cp...
无法解析的外部符号一般是因为在链接的时候,无法找到函数的实现。
一般先检查以下两项都能找到问题:
1.函数声明了,而且使用了,但是cpp没有实现函数。
2.引用了某个dll中的函数,但是没有添加...
若出现如下错误:
错误 1 error LNK2001: 无法解析的外部符号 &public: virtual struct QMetaObject const * __thiscall Widge...
error LNK2019
最近使用QT 5.0.2 设计界面,遇到一个纠结的问题:
建立工程后,再新建一个新的类(如class a),类声明在a.h头文件中,在main.cpp中 #include &a...
最近使用QT 5.0.2 设计界面,遇到一个纠结的问题:
建立工程后,再新建一个新的类(如class a),类声明在a.h头文件中,在main.cpp中 #include &a.h& ...
程序使用了Qt5+VS2010,使用VS类向导添加了一个类,并使其继承自QGLWidget,编译程序的时候出现了LNK2001和LNK2019错误。在下面网页上找到了答案
Qt5 error LNK...
Qt error LNK2019
Qt+MSVC环境下配置动态链接库
当在Qt的pro文件包含了项目所有的配置文件信息,关于pro文件的知道可以在网上自行搜索,本文仅讲解如何使用GUI导入第三方库文件。
--第一步:加入lib和d...
在VS配置了QT的环境中运行QT程序时,可能会出现如下错误:
error LNK1120:1个无法解析的外部命令
error LNK2019:无法解析的外部符号
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)本帖子已过去太久远了,不再提供回复功能。安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&C++中模板类使用友元模板函数 和友员非模版函数!使用不当出现编译错误:无法解析的外部符号…
在c++海大本科课程设计的最后章节(模板使用 )中涉及到了在Mat类模板中定义友元函数friend Mat operator+(Mat &m, T num);//所有元素加上同一数值;
声明在类中进行如上的声明,定义在类外进行模板函数的定义,链接报错:
error LNK2001: 无法解析的外部符号 &class Mat __cdecl operator+(class Mat &,double)& (??H@YA?AV?$Mat@N@@AAV0@N@Z)
1&D:\Installation Package\VC6cn\MyProjects\overload_abstract_template\template\Debug\template.exe : fatal error LNK1120: 1 个无法解析的外部命令
对在类模板中的友元函数operator+声明前加上一句:template& typename T& 就可以正常运行了,那么究其原因,下面对类模板的友元函数进行了总结整理:
在类模板中可以出现三种友元声明:
(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数。
(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权。
(3)只授予对类模板或函数模板的特定实例的访问权的友元声明。
要注意的是,友元函数并非成员函数,是改变了它对类成员的访问权限。
(1)没有什么好说的,如:
friend void fun();
此例中fun可访问A任意类实例中的私有和保护成员
friend void fun(T u);
这时友元使用与类不同的模板形参,T可以是任意合法标志符,友元函数可以访问A类的任何类实例的数据,即不论A的形参是int,double或其他都可以。
friend void fun(T u);
此时fun只有访问类中特定实例的数据。换句话说,此时具有相同模板实参的fun函数与A类才是友元关系。即假如调用fun时其模板实参为int,则它只具有A的访问权限。当然friend void fun(T u);中&&中的T可以是任意类型,比如int,double等
回到原问题,按(3)可改为:
class List{
friend std::ostream& operator && (std::ostream& os,const List& slist);
按(2)可改为:
class List{
friend std::ostream& operator && (std::ostream& os,const List& slist);
在这里其实两者实现的最终效果一样的,因为调用输出运算符时需要访问的类实例的对象是它本身,所以形参T在第一种改法中一定匹配。
对类建立友元函数很容易。但是迁移到模板上却容易出现让人摸不着头脑的连接错误。
层次不够,不做分析,单纯介绍两种为类模板定义友元函数的方法
  1 封闭型
template&typenameT&
classMyClass
friendvoidfunction(MyClass&T&&arg)
  要点:友元函数定义在模板体内。
2 开放型
template&typenameT&
classMyClass
template&typenameC&
friendvoidfunction(MyClass&C&&arg);
template&typenameC&
voidfunction(MyClass&C&&arg)
  要点:模板体内要另建模板。
  3 告诉编译器声明的设个是模板
usingnamespace
template&typenameT&
friendostream&operator&&&T&(ostream&,constA&T&&);
template&typenameT&
ostream&operator&&(ostream&output,constA&T&&a)
output&&&重载成功&&&
要点:显示地在重载的运算符或者函数后面加上模板声明& T &,告诉编译器友元函数是一个类型一致的模板。
如果希望使用函数与模板特化的类型相对应,则使用方法3(模板显示声明)
如果希望使用函数与模板特化的类型相独立,则使用方法2(二重模板)
简短的内联函数使用方法1

我要回帖

更多关于 构造函数调用虚函数 的文章

 

随机推荐