вот структура моей программы:
// 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"
Что я должен делать? Я сделал что-то не так?
Большое спасибо!
Matteo
Объяснение на самом деле довольно простое. Вы, вероятно, добавили оба файла в проект. Xcode пытается скомпилировать каждый файл в объектный файл, а затем связать их вместе.
Когда он пытается скомпилировать do.cpp, он не находит определение cout, потому что iostream не включен и ни math.h для sqrt, как часть do.cpp.
Этот файл отлично компилируется при компиляции как часть main.cpp, потому что он включен в файл и находит iostream и math.h, а также декларацию использования.
В любом случае, если вы удалите 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;
}
При создании нового файла я забыл отменить выбор "цель", чтобы при попытке построить проект он попытался собрать все отдельные файлы, а затем связать их вместе. Отключив "цель", я заставил ее работать.
Не делайте этого:
#include "do.cpp"
но вместо этого поместите этот файл " do.cpp
" в тот же проект Xcode вместе с файлом main.m или main.cpp.
И когда вы хотите построить из командной строки, вы можете сделать:
g++ main.cpp do.cpp -o mytesttool
который создаст инструмент командной строки с именем "mytesttool".