Xcode не обнаружит файлы, включенные из основного во включенный файл

0

вот структура моей программы:

// 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

  • 0
    Не шучу .... Но ты пытался закрыть и снова открыть IDE? Известно, что XCode вызывает проблемы ....
  • 0
    Э-э ... да! Я делал это пять или шесть раз. (Сейчас семь). Сборка продолжает падать.
Теги:
xcode
include
build

3 ответа

0

Объяснение на самом деле довольно простое. Вы, вероятно, добавили оба файла в проект. 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;
}
  • 0
    Что ж...! Это действительно сработало! Но теперь у меня больше нет этого файла в Xcode. Как мне отредактировать это и т.д.?
  • 0
    Вы не можете иметь оба! если вы хотите, чтобы файл был частью Xcode, сделайте это правильно. удалите #include "do.cpp" из main.cpp и добавьте правильные включения в do.cpp
Показать ещё 2 комментария
0

При создании нового файла я забыл отменить выбор "цель", чтобы при попытке построить проект он попытался собрать все отдельные файлы, а затем связать их вместе. Отключив "цель", я заставил ее работать.

0

Не делайте этого:

#include "do.cpp"

но вместо этого поместите этот файл " do.cpp " в тот же проект Xcode вместе с файлом main.m или main.cpp.

И когда вы хотите построить из командной строки, вы можете сделать:

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

который создаст инструмент командной строки с именем "mytesttool".

  • 0
    Ну, я сделал: я имею в виду, сначала я создал проект, и он создал main.cpp для меня. Затем я создал новый файл с новым -> файл -> пустой файл -> do.cpp. Я думаю, это автоматически добавило его в мой проект .. или нет?
  • 0
    Да, компиляция через командную строку работает, я только хотел, чтобы она работала напрямую из Xcode, но я могу жить без нее ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню