我正在使用Visual和qt加载项,当我构建我的项目时,它会根据我的项目中的构建规则生成moc_*.cpp文件:
<Tool
Name="VCCustomBuildTool"
Description="Moc'ing $(InputFileName)..."
CommandLine="$(QTDIR)\bin\moc.exe $(InputPath) -o .\GeneratedFiles\$(ConfigurationName)\moc_$(InputName).cpp (continues..)
AdditionalDependencies="$(QTDIR)\bin\moc.exe;.\myfilewithqobject.h"
Outputs=".\GeneratedFiles\$(ConfigurationName)\moc_myfilewithqobject.cpp"/>在生成moc_myfilewithqobject.cpp之后,它将继续构建项目,并在链接阶段给出链接2001错误:
unresolved external symbol "public: virtual struct QMetaObject const * __thiscall myfilewithobject::metaObject(void)const
unresolved external symbol "public: virtual void * __thiscall myfilewithobject::qt_metacast(char const *)
unresolved external symbol "public: virtual int __thiscall myfilewithobject::qt_metacall因为它找不到文件moc_myfilewithobject.obj。不生成moc_myfilewithobject.obj是因为生成后没有编译moc_myfilewithobject.cpp。但是,当我将moc_myfilewithobject.cpp包含到我的项目中时,它就会被编译,问题就解决了。但这是手工完成的,有时会引起一些问题。有没有办法解决这个问题,而不包括moc__.cpp文件的项目手动?比如在生成后编译moc__.cpp,还是自动包含它?
注意:我添加了一个试用.h文件作为qt类,以查看在项目文件中添加新的qt头时会发生什么。它添加了不属于我的问题文件的行:
<ClCompile Include="GeneratedFiles\Debug\moc_Denemeqt.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>因此,我认为这是一个真正的配置,但我以前作为qt类创建的文件没有这样的配置。但是,当我删除GeneratedFiles中的Debug文件夹时,会出现相同的错误,因为当我删除Debug文件夹时,moc__.cpp文件也会从项目文件中删除。所以问题是:生成的moc__.cpp文件不能删除,是真的吗?
发布于 2016-03-01 07:09:39
在Sloution Explorer中,检查
生成文件
调试(或发布发生错误的版本)
moc_[yourErrorFile].cpp 右击它以查看属性
如果通用->从生成中排除为True,则将其更改为False
这是一种可能会发生错误的情况。
发布于 2016-09-01 10:28:56
@newdazhu发现了一些东西。
我刚刚遇到过类似的情况,项目中的一些类(但不是所有类)都有未解决的成员函数。结果发现,这是因为缺少一些对象文件(用于moc‘’ed类)。这些都没有生成,因为它们被排除在当前配置的生成之外。
在我的例子中,它们被排除在调试和发布配置的构建之外。这通常是一个错误,除非所讨论的源文件在末尾包含一个moc_*.cpp文件( Qt中经常使用的一种技术,因此您可以在源文件中有信号/插槽)。在这种情况下,您实际上必须排除这两个/所有配置,因为否则您将得到一个多定义错误( moc_*.cpp已经编译到另一个对象文件中)。
发布于 2017-07-21 11:13:53
这是由于项目文件夹中的空间..。我的项目/
重命名为我的-项目/
都是这些人..。
https://stackoverflow.com/questions/28455525
复制相似问题