我有一个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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top