• 11727阅读
  • 7回复

[提问]qt界面程序中,无法添加自定义类 [复制链接]

上一主题 下一主题
离线zstrel
 

只看楼主 倒序阅读 楼主  发表于: 2015-09-25
回复本帖可获得2点威望奖励!
每人最多可获奖1次,奖池剩余6点威望 (中奖几率10%)
本人想编一个界面程序,但是刚刚开始就发现,添加自定义类,总是编译错误,即使把自定义类简化到很简单的程度,也还是报错。同样的简单类定义,在VS2013上,编译是能通过的,且运行正确,不知道是不是开发环境设置不对,请高手帮忙指点一下。
1.主窗口文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>


namespace Ui {
class MainWindow;
}


class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();




private:
    Ui::MainWindow *ui;
};


#endif // MAINWINDOW_H
2.主窗口源文件:

#include "ui_mainwindow.h"
#include "mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}


MainWindow::~MainWindow()
{
    delete ui;
}
3.自定义简单类头文件:

#ifndef ACLASS_H
#define ACLASS_H
class AClass
{
public:
    AClass();
    unsigned int iData;
};
#endif // ACLASS_H
4. 自定义简单类源文件:

#include "aclass.h"
AClass::AClass()//构造函数的实现
{
    iData = 1;
}
5.主函数文件:

#include <QApplication>#include <QtGui>

#include "mainwindow.h"
#include "aclass.h"

int main(int argc, char *argv[]){
    QApplication a(argc, argv);    MainWindow w;

    AClass      aClass;

    w.show();
    return a.exec();}

说明:上面主函数文件中,若把
AClass      aClass;
一句注释掉,则编译正确,程序可以运行,但是,若果加上这一句,编译就有错误,
main.obj:-1: error: LNK2019: 无法解析的外部符号 "public: __cdecl AClass::AClass(void)" (??0AClass@@QEAA@XZ),该符号在函数 main 中被引用
debug\IOTest.exe:-1: error: LNK1120: 1 个无法解析的外部命令
NMAKE:-1: error: U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\link.EXE"”: 返回代码“0x460”
NMAKE:-1: error: U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\nmake.exe"”: 返回代码“0x2”





23:01:30: 为项目IOTest执行步骤 ...
23:01:30: 配置没有改变, 跳过 qmake 步骤。
23:01:30: 正在启动 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\nmake.exe"

    "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\nmake.exe" -f Makefile.Debug
    cl -c -nologo -Zm200 -Zc:wchar_t -FS -Zi -MDd -GR -W3 -w34100 -w34189 -EHsc /Fddebug\IOTest.pdb -DUNICODE -DWIN32 -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I"..\IOTest" -I"." -I"C:\Qt\Qt5.4.2\5.4\msvc2013_64\include" -I"C:\Qt\Qt5.4.2\5.4\msvc2013_64\include\QtWidgets" -I"C:\Qt\Qt5.4.2\5.4\msvc2013_64\include\QtGui" -I"C:\Qt\Qt5.4.2\5.4\msvc2013_64\include\QtANGLE" -I"C:\Qt\Qt5.4.2\5.4\msvc2013_64\include\QtCore" -I"debug" -I"." -I"C:\Qt\Qt5.4.2\5.4\msvc2013_64\mkspecs\win32-msvc2013" -Fodebug\ @C:\Users\ZGS\AppData\Local\Temp\nm611C.tmp
main.cpp
f:\z2_qtfiles\working_iotest\iotest\iotest\aclass.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\IOTest.exe @C:\Users\ZGS\AppData\Local\Temp\nm6861.tmp
main.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl AClass::AClass(void)" (??0AClass@@QEAA@XZ),该符号在函数 main 中被引用
debug\IOTest.exe : fatal error LNK1120: 1 个无法解析的外部命令
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\link.EXE"”: 返回代码“0x460”
Stop.
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\nmake.exe"”: 返回代码“0x2”
Stop.
23:01:33: 进程"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\nmake.exe"退出,退出代码 2 。
Error while building/deploying project IOTest (kit: Desktop Qt 5.4.2 MSVC2013 64bit)
When executing step "Make"
23:01:33: Elapsed time: 00:03.
麻烦高手指点一下,先谢过啦!
离线goodname

只看该作者 1楼 发表于: 2015-09-26
看起来像是工程里面没有添加aclass.cpp源文件?

4条评分好评度+1贡献值+1金钱+3威望+1
zstrel 好评度 +1 优秀文章,支持!n神马都是浮云 2015-09-26
zstrel 贡献值 +1 优秀文章,支持!n神马都是浮云 2015-09-26
zstrel 威望 +1 优秀文章,支持!n神马都是浮云 2015-09-26
zstrel 金钱 +3 优秀文章,支持!n神马都是浮云 2015-09-26
离线zstrel

只看该作者 2楼 发表于: 2015-09-26
回 goodname 的帖子
goodname:看起来像是工程里面没有添加aclass.cpp源文件?
 (2015-09-26 00:00) 

非常感谢,你说的很对,我加入了一句:
#include "aclass.h"
#include "aclass.cpp"

编译就正确了。
但是,我不明白,为什么需要包含.cpp文件?以前从来没这么用过。麻烦继续点播一下,谢谢!
离线zstrel

只看该作者 3楼 发表于: 2015-09-26
补充:总觉得include *.cpp这样的写法不太专业,正确的写法应该是什么样呢?
另外,以前编写Qt程序,是不需要包含cpp文件的,为什么现在会有这样的变化?
离线tylan

只看该作者 4楼 发表于: 2015-09-26
你的pro文件中,展示一下。
离线realfan

只看该作者 5楼 发表于: 2015-09-26
回 zstrel 的帖子
zstrel:非常感谢,你说的很对,我加入了一句:
#include "aclass.h"
#include "aclass.cpp"
编译就正确了。
....... (2015-09-26 04:33) 

aclass.h 和aclass.cpp加到工程中
在main.cpp加#include "aclass.h"
不用#include "aclass.cpp
离线zstrel

只看该作者 6楼 发表于: 2015-09-28
回 tylan 的帖子
tylan:你的pro文件中,展示一下。 (2015-09-26 08:58) 

#-------------------------------------------------
#
# Project created by QtCreator 2015-09-27T22:59:50
#
#-------------------------------------------------

QT       += core gui
QT       += network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = tmp1
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    aclass.cpp

HEADERS  += mainwindow.h \
    aclass.h

FORMS    += mainwindow.ui
在线fsu0413

只看该作者 7楼 发表于: 2015-09-28
删掉中文注释
快速回复
限100 字节
 
上一个 下一个