编译中的C++代码类:编译过程中的错误:STL向量 我有一个C++类,它在GCC上和Linux上的Visual Studio中编译好。p>

编译中的C++代码类:编译过程中的错误:STL向量 我有一个C++类,它在GCC上和Linux上的Visual Studio中编译好。p>,c++,xcode,porting,C++,Xcode,Porting,B.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);

B.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中编译它而不会出现问题

谢谢

EDIT:Added defines.h还向sample添加了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

不确定是否忘记粘贴,但您有一个未终止的ifndef

里面是什么

编辑:您似乎已经找到了解决方案。还有一句话:

#include <stdlib.h>
< C++ >请:

#include <cstdlib>

:d

< p>当然,定义中有一些东西。h影响类定义。

确保你将它编译成C++。右键单击XCODE中的文件,选择GET信息,并确保文件类型被设置为SoeCeCooDe.CP..cP用于实现文件。

是否包含C++文件头在.m文件中? .m文件被视为具有Objective-c扩展名的.c文件

.mm文件被视为扩展名为Objective-C的.cpp文件,然后称为Objective-C++


只需将任何.m文件重命名为.mm,单击鼠标右键或ctrl键,然后在Xcode中的文件上选择“重命名”。

假设您讨论的是使用gcc进行实际编译的OS X Xcode。因此,除了gcc的不同版本之外,它和Linux之间应该没有什么区别

我首先想到的是,您键入了boid.h作为文件名,但您包含了boid.h。假设这不是一个打字错误,我希望这会在Linux和OS X上都造成麻烦

编辑以回答新问题:嗯。。。vector绝对是我机器上Xcode:/Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/vector的一部分


进一步思考:如果您将源代码和makefiles从Linux版本移植到Mac,您可能可以像在Linux上一样从命令行编译它。…

此问题有两个错误:

我的一个收信人有一个打字错误,导致了一个编译错误 矢量未找到错误已由.m文件修复为.mm
在不将任何.m更改为.mm或类似内容的情况下,如果单击项目,请单击标记->生成设置 一直到LLVM GCC 4.2语言新xcode说Apple LLVM compiler 4.2您将看到编译源代码,将该值更改为Objective-C++

我希望这会有所帮助。 在将xCode更新到版本10之后,我遇到了一些问题,包括库。通过更改项目的生成设置目标的生成设置中的C++库类型,找到了一个简单的解决方案:

C++标准库:LCB+LLVM C++标准库,用C++ 11支持< /P>


编译时没有任何问题。

在问题中添加了defines.h,另外,endif在原始代码中,win_层被注释掉,我缺少一些函数,但现在它是空的,我将从项目中排除它现在我在vector中遇到一个错误:错误:vector:没有这样的文件或目录Hi,在你的评论之后,我接受了正确的答案。很抱歉,我在Xcode中看不到重命名选项,所以我在Finder中复制了该文件,将其重命名为.mm,从Xcode中的项目中删除了.m文件,并最终将.mm文件添加到Xcode中的项目。现在,可以在Xcode中选择该文件,并在一秒钟后再次选择它,然后它的名称将是可编辑的。