Xcode不会检测包含在main文件中的文件

时间:2014-02-23 21:12:40

标签: c++ xcode build include

这是我的程序的结构:

// File: main.cpp
#include <iostream>
#include <math.h>

using namespace std;
#include "do.cpp"

int main()
{
   doit();
}

// File: do.cpp
void doit()
{
   cout<<sqrt(2)<<endl;
}

当我这样做的时候     g ++ main.cpp

一切都很顺利。现在,如果我打开这个Xcode项目(我选择“命令行实用程序”作为项目类型)并尝试构建和运行,它会一直说:     使用未声明的标识符sqrt     未知的类型名称'ostream'

我该怎么办?我做错了吗?

非常感谢!

利玛

3 个答案:

答案 0 :(得分:0)

不要这样做:

#include "do.cpp"

但是将“do.cpp”文件放在同一个Xcode项目中,与main.m或main.cpp文件一起。

当你想从命令行构建时,你可以这样做:

g++ main.cpp do.cpp -o mytesttool

将创建名为“mytesttool”的命令行工具。

答案 1 :(得分:0)

实际上解释很简单。您可能已将两个文件添加到项目中。 Xcode尝试将每个文件编译成目标文件,然后将它们链接在一起。

当它尝试编译do.cpp时,它找不到cout的定义,因为没有包含iostream,并且sq.h中的math.h都没有,作为do.cpp的一部分。

当编译为main.cpp的一部分时,该文件编译良好,因为它包含在文件中,它找到iostream和math.h以及using声明。

无论如何,如果你从项目中删除do.cpp(只是引用),一切都应按预期编译。

没有头文件的正确方法

// File: main.cpp

void doit();  // declare the function

int main()
{
   doit();
}

// File: do.cpp
#include <iostream>
#include <math.h>

using namespace std;

void doit()
{
   cout<<sqrt(2)<<endl;
}

使用标题文件的正确方法

// File do.h
#ifndef __DO_H_
#define __DO_H_
void doit();
#endif  // __DO_H_

// File: main.cpp

#include "do.h"

int main()
{
   doit();
}

// File: do.cpp
#include <iostream>
#include <math.h>
#include "do.h"

using namespace std;

void doit()
{
   cout<<sqrt(2)<<endl;
}

答案 2 :(得分:0)

在制作新文件时,我忘了取消选中“目标”选项,这样当它尝试构建项目时,它会尝试构建所有单个文件,然后将它们链接在一起。通过禁用“目标”,我得到了它的工作。