这是我的程序的结构:
// 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'
我该怎么办?我做错了吗?
非常感谢!
利玛
答案 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)
在制作新文件时,我忘了取消选中“目标”选项,这样当它尝试构建项目时,它会尝试构建所有单个文件,然后将它们链接在一起。通过禁用“目标”,我得到了它的工作。