C++: Используя станд.:: суд с gcc на Mac OSX

Я плохо знаком с программированием на C++, и я пытаюсь сделать свое первое осуществление на Mac с помощью gcc в терминале.

К сожалению, я не могу скомпилировать из-за проблем, связанных с iostream. С простой программой как:

#include <iostream>

int main()
{

 std::cout << "hello world";
 std::cout << endl;
 return 0;
}

это дает мне ошибку:

error: ‘endl’ was not declared in this scope

удаление суда <<endl; строка дает мне эти ошибки:

Undefined symbols:
  "___gxx_personality_v0", referenced from:
      ___gxx_personality_v0$non_lazy_ptr in cceBlyS2.o
  "std::ios_base::Init::~Init()", referenced from:
      ___tcf_0 in cceBlyS2.o
  "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
      _main in cceBlyS2.o
  "std::ios_base::Init::Init()", referenced from:
      __static_initialization_and_destruction_0(int, int)in cceBlyS2.o
  "std::cout", referenced from:
      __ZSt4cout$non_lazy_ptr in cceBlyS2.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Очевидно, что iostream заголовок правильно не связан. Я попробовал" <"iostream.h">" и "iostream.h" без успеха.

У кого-либо есть какая-либо подсказка, которая могла помочь мне?Спасибо!

8
задан Ondrej Slinták 27 May 2018 в 14:30
поделиться

3 ответа

Вам нужно использовать std :: endl; - вся стандартная библиотека находится в пространстве имен std . Также похоже, что вы использовали gcc вместо g ++ в командной строке. Последний автоматически выполняет шаги, необходимые для правильной компоновки C ++.

17
ответ дан 5 December 2019 в 06:37
поделиться

Вам просто нужно использовать std :: endl; . Или, что еще лучше, воспользуйтесь удобной директивой using :

#include <iostream>

using namespace std;

int main()
{
    cout << "hello world";
    cout << endl;
    return 0;
}
1
ответ дан 5 December 2019 в 06:37
поделиться

endl; подпадает под пространство имен std

ваши 2 варианта следующие:

1) объявление вашего пространства имен, например

#include <iostream>
using namespace std;

int main() {
 cout << "hello world";
 cout << endl;
 return 0;
}

или используя std :: endl; например

 std::cout << "hello world";
 std::cout << std::endl;
 return 0;

Посмотрите, какой из них вам подходит. Я рекомендую 1) (убедитесь, что я не использовал std :: cout , потому что я уже объявил свое пространство имен), поскольку это помогает сократить количество вводимых каждый раз std :: .

7
ответ дан 5 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: