- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个在 Vs 2008 中使用 Qt 和点云库 (PCL) 等库编辑的程序。
PCL 有一个包含 boost 的第 3 方库。
但是编译后出现了一些错误:
1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/sequenced_index.hpp(926) : error C3083: 'Q_FOREACH': the symbol to the left of a '::' must be a type 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/sequenced_index.hpp(926) : error C2039: 'tag' : is not a member of 'boost' 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/sequenced_index.hpp(926) : error C2061: syntax error : identifier 'tag' 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/ordered_index.hpp(1399) : error C3083: 'Q_FOREACH': the symbol to the left of a '::' must be a type 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/ordered_index.hpp(1399) : error C2039: 'tag' : is not a member of 'boost' 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/ordered_index.hpp(1399) : error C2061: syntax error : identifier 'tag' 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/hashed_index.hpp(1254) : error C3083: 'Q_FOREACH': the symbol to the left of a '::' must be a type 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/hashed_index.hpp(1254) : error C2039: 'tag' : is not a member of 'boost' 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/hashed_index.hpp(1254) : error C2061: syntax error : identifier 'tag' 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/random_access_index.hpp(1012) : error C3083: 'Q_FOREACH': the symbol to the left of a '::' must be a type 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/random_access_index.hpp(1012) : error C2039: 'tag' : is not a member of 'boost' 1>C:\Program Files\PCL 1.5.1\3rdParty\Boost\include\boost/multi_index/random_access_index.hpp(1012) : error C2061: syntax error : identifier 'tag'
第一个问题,源文件中错误位置为:
template<typename SuperMeta,typename TagList>
inline boost::mpl::true_* boost_foreach_is_noncopyable(
boost::multi_index::detail::random_access_index<SuperMeta,TagList>*&,
boost::foreach::tag) // <-------------error here for the first compile error.
{
return 0;
}
我认为这可能表明 Q_FOREACH
与 boost foreach 冲突。
但是我不知道如何解决这个问题?
最佳答案
问题是 Qt 定义了一个 foreach
与 #define foreach Q_FOREACH
冲突的宏 ( boost::foreach
)命名空间。
解决它的最简单方法是在 Qt 之前包含 Boost,或者在包含 boost 的头文件之前简单地取消定义 Qt 的宏。我更喜欢第二种,因为它不需要额外的文档 ( // remember to include Boost before Qt
),而且在嵌套的头文件中管理起来更容易,如果您使用预编译的头文件。
#undef foreach
#include <boost/foreach.hpp>
此选项比禁用 Qt 的关键字(编译标志 -DQT_NO_KEYWORDS
)侵入性更小,并且可以在需要时仅应用于受影响的文件。不会影响Q_FOREACH
的使用(显然,如果您使用 Qt 的 foreach
,它将失败)。 Qt 包含在 <boost/foreach.hpp>
之前或之后也是独立工作的.
关于c++ - Boost foreach 与 Q_FOREACH (Qt) 和 moc 生成冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13686283/
我创建 temporaryContext 如下所示。它会包含未保存的更改还是仅包含来自 Utility.managedObjectContext() 的已保存更改? let temporaryCont
我在 CoreData 和父子 MOC 上遇到了这个问题:当向子 MOC 添加对象、保存它们并保存父 MOC 时,所有对象的属性都会重置为默认值。 我在这里粘贴了两个 MOC 的日志,具体是这些日志中
自上周以来我遇到了一个大问题,但我找不到任何可行的解决方案。 当我编译 Qwt 6.1.2(然后尝试使用 6.1.3)时 Windows 7 32bits mingw32控制台,编译序列后,我收到以下
我遇到了一个我无法理解的NSObjectInaccessibleException: *** Terminating app due to uncaught exception 'NSObjectI
想象一下两个托管对象上下文,moc A 和 moc B,它们填充了相同的对象集并共享相同的持久存储协调器。现在,我从 moc A 中删除一个对象并保存上下文。它还会存在于 moc B 中吗? 我测试了
直到现在,我一直对主线程使用“main moc”,初始化如下: [[NSManagedObjectContext alloc] init]; 然后我有 NSOperation 子类,它们有自己的 mo
假设我有一个显示 MOC,用于显示从 Web 服务获取的地址簿联系人。在应用程序的其他地方,我有一个搜索功能,可以根据用户输入的查询搜索 Web 服务,我获取这些对象并将其存储在暂存器 MOC 中,这
我想使用 Q_CLASSINFO 宏存储一些类信息。但是我想将它包装在我自己的宏中,例如: #define DB_TABLE( TABLE ) \ Q_CLASSINFO( "db_table
我无法使用已连接到正确插槽的按钮。 这里是 infoPage.cpp 文件: #include "infoPage.h" InfoPage::InfoPage(QWidget *parent)
我在编译项目时遇到了这个非常奇怪的问题。MOC 似乎正在向被 moc'ed 的类名添加一个命名空间,尽管它在文件/类中的任何地方都没有提到。 然而,命名空间存在于我使用的库中,但它隐藏在头文件中很远的
我必须从 Qt 命令提示符运行以下命令:qmake -project 然后是 make,这会为我提供带有 Moc 文件的调试文件夹。 奇怪的是,这是我的 PC 生成 moc_.cpp 文件的唯一方式。
我希望主队列中的每个实体都有一个 moc,这样用户就可以同时修改多个实体。 假设有 2 个实体:“包”和“类别”,一个包可以有多个类别。因此,当用户在选择类别时修改/创建 Bag 中的项目时,用户也可
我正在尝试构建qteSTLib/tutorial1示例,但是运行nmake时未生成testqstring.moc文件(我在Windows XP SP3上运行Qt 4.5.2)。 我将testqstri
我正在开发一个使用 cmake 的基于 Qt 的项目。我所有生成的 moc 文件都被命名为 *.moc ,但我有一些文件,它们生成的 moc 文件的名称为 moc_*.cpp ,不是 *.moc .为
我有 1 个 parent 2 个 child 的 moc 情况。其中 1 个子级是主界面 moc,另一个是用于在云上同步更改的专用队列。 我遇到过这样的情况:私有(private)云同步子模块保存更
我正在使用 QT Creator 1.3.1 并尝试编译,但出现此错误... 请帮我摆脱它 mingw32-make[1]: Leaving directory `C:/Documents and S
我正在尝试将 ovpn3 的 ovpncli 示例转换为派生自 QObject 的类。我无法将源文件转换为单独的接口(interface) (.h) 和实现 (.cpp) 文件。为了让 MOC 满意,
我的实体上有类别,允许我将 JSON 解析为实体: - (id) populateFromJson: (NSDictionary *) json { ... } 然后使用 MagicalReco
我目前正在使用 Qt (4.7) 编写一个小型应用程序。我使用嵌套的命名空间,比如 namespace app { namespace core { class CoreCla
我正在编写一个项目。尝试进行静态构建后,我开始出现错误。我做了一些更改,我不记得了。但是,我确信如果可以清除这个 stub ,那么主项目也可以被清除。 这是头文件。 #ifndef MYLABEL_H
我是一名优秀的程序员,十分优秀!