QtCreator:目标调试/...obj不存在。

6

我是一个新手,对于C++和Qt并不熟悉。我的问题是,我创建了一个新的类,但是它无法编译。 编译器会提示:"在...中未解决的对象"。 这是头文件:

#ifndef TRANSITIOUSPLAYER_H
#define TRANSITIOUSPLAYER_H
#include <QtMultimedia>

class TransitiousPlayer
{

public:
    TransitiousPlayer();
    TransitiousPlayer(const TransitiousPlayer &other);
    ~TransitiousPlayer();

    void play();
};
Q_DECLARE_METATYPE(TransitiousPlayer)
#endif // TRANSITIOUSPLAYER_H

类:

#include "transitiousplayer.h"

...

void TransitiousPlayer::play(){
    QMediaPlayer* player = new QMediaPlayer(this);
    QMediaPlaylist* playlist = new QMediaPlaylist(player);
    playlist->playlist->addMedia(new QString("sh.mp3"));
    player->setPlaylist(playlist);
    player->play();
}

在mainwindow.cpp文件中:

TransitiousPlayer player;
player.play();

在主函数中我还调用了:

qRegisterMetaType<TransitiousPlayer>();

如果我只尝试编译transitiousplayer.cpp文件,它会显示:“目标debug/transitiousplayer.obj不存在。”

如果您正在使用qmake,您能否展示您的项目文件?这是哪个操作系统?OT:就我所知,“Transitious”不是英语单词。 - László Papp
我手动将文件添加到了makefile中,这对我起作用了。操作系统是Windows,我正在使用Qt Creator。在Qt Creator中是否有C++类的任何属性?也许有一个“编译”复选框?“Transitious”只是一个幻想的名称和工作标题。 - theporenta
您可以添加源文件和头文件,它们将自动添加到后台的 qmake 文件中。如果您自己打开项目文件,您会看到 HEADERSSOURCES 变量已经填好了。您也可以手动自定义它们,而在重新生成项目树时,它将自动重新解析。请检查是否已添加必要的文件。 - László Papp
3个回答

12

也许已经太晚了,但我遇到了同样的问题,而且我也是QT(5.2.0)的新手。

由于某种原因,如果makefile已经存在,在我的情况下,即使您选择“清理”,它也不会将其添加到makefile中。我认为“清理”应该做的就是这个。

对我有效的解决方案是手动删除构建目录的内容,然后再次点击“构建”,这样将重新创建它。如果不是这样,我不确定clean应该做什么。

我有一个带有几个类的项目,我构建并运行了它,然后用文件->新文件.. C++类创建了一个新类。编写我的类并再次按下运行按钮。结果出现了我的构造函数丢失。只是在那个文件上点击“构建”,然后得到了相同的Target Debug/... obj不存在的消息。检查了pro文件和类源文件以及头文件名,发现它们都存在磁盘上,检查了Makefile.Debug,那些文件没有任何踪迹。点击“清理”,它并没有改变makefile。删除build-Projectname-Desktop-qt_5_2_0..目录的内容,再次点击运行,它就能够正常构建和运行了。


5

为了日后参考:我在添加了一个新的类文件后遇到了这个问题,为了编译新文件,您需要在“构建”菜单下运行qmake。


1
这就是为什么我的主程序是 添加类 => 运行 qmake - deW1
@Tim shoot,我先看到了上面的答案。这个听起来更简洁,下次我会试试。 - yano

1
在Qt项目视图中,再次选择“运行qmake”。然后一切都没问题了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接