在Xcode中编译C ++类:编译期间的错误:STL Vector
题
我有一个C ++类,可以在Linux上使用GCC和Visual Studio中的寡妇进行编译。
boid.h:
#ifndef BOID_CLASS_HEADER_DEFINES_H
#define BOID_CLASS_HEADER_DEFINES_H
#include "defines.h"
class Boid {
public:
// Initialize the boid with random position, heading direction and color
Boid(float SceneRadius,float NormalVel);
.....
protected:
...
};
#endif
和boid.cpp:
#include "Boid.h"
// Initialize the boid with random position, heading direction and color
Boid::Boid(float SceneRadius,float NormalVel)
{
....
}
但是,当我在xcode中编译此代码时,我会遇到以下错误:
Compiling Boid.h: "error: vector: No such file or directory"
有任何想法吗?我认为您可以使用C/C ++代码并在XCode中毫无问题地编译它?
谢谢
编辑: :添加defines.h(还将#endif添加到示例中,但这是在原始代码中)
编辑2: :在评论几个包含的几个包含空的错误之后,我会遇到不同的错误:上面的矢量错误。
#ifndef BOID_NAV_DEFINES_H
#define BOID_NAV_DEFINES_H
#include <stdlib.h>
#include <vector>
#include "Vector3d.h"
#include "Point3d.h"
#include "win_layer.h"
#endif
解决方案
您是否在.m文件中包括C ++标头?
.m文件被视为带有Objective-C扩展名的.c文件。
。
只需将任何.m文件重命名为.mm,右键单击或ctrl单击,然后在Xcode中的文件上选择重命名即可。
其他提示
无需更改任何.m到.mm或类似的内容,如果您单击项目,请单击Tagets->构建设置一直延伸到 “ LLVM GCC 4.2-语言” (新Xcode说 “ Apple LLVM编译器4.2”) 你会看见 编译源为 将该价值更改为 Objective-C ++;
确保将其编译为C ++。右键单击XCode中的文件,然后选择 获取信息 并确保 文件类型 被设定为 Sourcecode.cpp.cpp 用于实现文件。
我希望这将有所帮助。将XCode更新为版本10后,我遇到了包括<ap>和<vector>库,包括<ap>和<vector>库。通过更改项目的构建设置(目标的构建设置)中的C ++库类型来找到一个简单的解决方案:
C ++标准库:LIBC ++(LLVM C ++标准库,带有C ++ 11支持)
毫无问题地编译。
毫无疑问,defines.h中的某些内容正在影响类定义。
这个问题有两个错误:
- 我的一个包含的错字会导致编译错误
- 未发现的矢量错误是由.m文件确定为.mm的
假设您正在谈论使用GCC进行实际编译的OS X Xcode。因此,除了可能不同的GCC版本外,它和Linux之间应该没有区别。
首先,在这里跳出来的第一件事是,您已输入“ boid.h”作为文件的名称,但您包括“ boid.h”。假设这不是错字,我希望这会在Linux和OS X上造成麻烦。
编辑以回答新问题:嗯...矢量绝对是xcode的一部分: /Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/vector
在我的机器上。
进一步思考:如果将源和makefiles从Linux构建到MAC,则可以像在Linux上一样从命令行中进行编译。
不确定您是否忘了粘贴,但是您有一个未终止的#ifndef
里面有什么 定义 ?
编辑: 您似乎已经找到了解决方案。另一句话:
#include <stdlib.h>
对于C ++,请:
#include <cstdlib>
:d