10

我有一个 C++ 类,可以在带有 gcc 的 linux 和 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
4

8 回答 8

24

您是否在 .m 文件中包含 C++ 标头?

.m 文件被视为具有 Objective-C 扩展名的 .c 文件。

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

只需将任何 .m 文件重命名为 .mm,右键单击或按住 ctrl 单击并在 Xcode 中选择文件上的重命名。

于 2009-02-11T00:29:19.840 回答
17

在不将任何 .m 更改为 .mm 或类似内容的情况下,如果您单击项目,请单击 tagets->build settings 一直到“LLVM GCC 4.2 - Languages”(新的 xcode 说“Apple LLVM compiler 4.2”)你将看到Compile Sources As将该值更改为Objective-C++

于 2012-05-14T16:51:33.190 回答
2

确保将其编译为 C++。右键单击 XCode 中的文件并选择Get Info并确保将File Type设置为sourcecode.cpp.cpp以用于实现文件。

于 2009-02-11T00:23:15.533 回答
2

我希望这将有所帮助。将 xCode 更新到版本 10 后,我遇到了包括 <map> 和 <vector> 库在内的问题。通过更改项目的构建设置(目标的构建设置)中的 C++ 库类型找到了一个简单的解决方案:

C++ 标准库:libc++(支持 C++ 11 的 LLVM C++ 标准库)

编译没有任何问题。

于 2018-09-19T06:21:20.783 回答
1

假设您正在谈论使用 gcc 进行实际编译的 OS X XCode。所以这和 Linux 应该没有区别,除了 gcc 的版本可能不同。

这里让我感到震惊的第一件事是您输入了“boid.h”作为文件名,但您包含了“Boid.h”。假设这不是一个错字,我希望这会在 Linux 和 OS X 上造成麻烦......

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

进一步思考:如果您将源代码和 makefile 从 Linux 构建移植到 Mac,您可能只需像在 Linux 上一样从命令行编译它......

于 2009-02-11T00:32:49.550 回答
0

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

define.h里面有什么?

编辑:您似乎已经找到了解决方案。再说一句:

#include <stdlib.h>

对于 C++,请:

#include <cstdlib>

:D

于 2009-02-11T00:07:06.570 回答
0

毫无疑问,defines.h 中的某些内容正在影响类定义。

于 2009-02-11T00:11:33.097 回答
0

这个问题有两个错误:

  • 我的一个包含有一个错字导致编译错误
  • 未找到矢量错误已由 .m 文件修复为 .mm
于 2009-02-11T00:53:23.540 回答