C ++: Использование std :: cout с gcc на Mac OSX - PullRequest
8 голосов
/ 12 февраля 2010

Я новичок в программировании на 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

снятие cout << endl; линия дает мне эти ошибки: </p>

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" безуспешно.

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

Ответы [ 3 ]

17 голосов
/ 12 февраля 2010

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

7 голосов
/ 12 февраля 2010

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:: каждый раз.

1 голос
/ 12 февраля 2010

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

#include <iostream>

using namespace std;

int main()
{
    cout << "hello world";
    cout << endl;
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...