Xcode 不会检测包含文件中的主文件中包含的文件
Xcode won't detect files included from main in included file
这是我的程序结构:
// 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++ 主.cpp
一切都很顺利。现在,如果我将其作为Xcode项目打开(我选择了"命令行实用程序"作为项目类型)并尝试仅构建和运行,它一直说: 使用未声明的标识符 sqrt 未知类型名称"ostream"
我应该怎么做?我做错了什么吗?
谢谢!
马迪奥
不要这样做:
#include "do.cpp"
而是将" do.cpp
"文件放在同一个 Xcode 项目中,与您的 main.m 或 main.cpp 文件放在一起。
当您想从命令行构建时,您可以执行以下操作:
g++ main.cpp do.cpp -o mytesttool
这将创建名为"mytesttool"的命令行工具。
解释其实很简单。您可能将这两个文件都添加到了项目中。Xcode 尝试将每个文件编译成一个目标文件,然后将它们链接在一起。
当它尝试编译do时.cpp它找不到cout的定义,因为不包括iostream,也没有包含sqrt的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;
}
制作新文件时,我忘了取消选中"目标"选择,因此当它尝试构建项目时,它会尝试构建所有单个文件,然后将它们链接在一起。通过禁用"目标",我让它工作。
相关文章:
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- C++文件包含多行
- CMake 如何强制third_party库将项目文件包含在当前项目源目录中?
- 是否可以将要"ShellExecute"的文件包含在 dll 中?如果是这样,"ShellExecute"中的文件位置应该是什么?
- C++ 逐行从文件(包含空格)读取数据
- 在 C++ 中,.h 文件包含文件但不起作用
- 生成的资源文件包含奇怪的包含文件
- 可变参数类的文件包含问题
- 为什么文件命令声明可执行文件包含"debug_info"
- 可以将标头文件包含在多个源文件中,而无需重复保护
- 为什么将.HPP文件包含在.h文件中
- Qt C++:将所有库文件包含在项目文件夹中
- 有条件地将文件包含在C++标头中
- 将多个原型文件包含在一个项目中会导致protobuf_AssignDescriptorsOnce()已经有一个主体
- 有没有办法将文件包含在C++中的所有项目文件中
- 将外部.asm文件包含到C++代码中
- 什么是"pch.h",为什么需要将其作为第一个头文件包含在内?
- 该头文件包含DirectX 12中的ThrowIfFailed()
- QT C :函数的多个定义当Header文件包含在MainWindow.h中时
- QT创建者错误地处理标头文件包含来自Directory