C++:在mac osx上使用带有gcc的std :: cout

Pat*_*tof 8 c++ macos

我是C++编程的新手,我尝试在终端上使用gcc在mac上进行我的第一次练习.

不幸的是,由于与iostream相关的问题,我无法编译.使用简单的程序:

#include <iostream>

int main()
{

 std::cout << "hello world";
 std::cout << endl;
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

error: ‘endl’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

删除cout << endl; line给了我这些错误:

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
Run Code Online (Sandbox Code Playgroud)

很明显,iostream标头没有正确链接.我试过"<"iostream.h">"和"iostream.h"没有成功.

有人有任何可以帮助我的提示吗?谢谢!

Jer*_*fin 17

您需要使用std::endl;- 整个标准库位于std命名空间中.它看起来像你在命令行gcc而不是使用g++.后者自动执行正确链接C++所需的步骤.


Buh*_*ndi 7

endl;属于std命名空间

您的2个选项如下:

1)声明你的命名空间,例如

#include <iostream>
using namespace std;

int main() {
 cout << "hello world";
 cout << endl;
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

或使用std::endl;例如

 std::cout << "hello world";
 std::cout << std::endl;
 return 0;
Run Code Online (Sandbox Code Playgroud)

看看哪一个适合你.我建议1)(检查我没有这样做,std::cout因为我已经声明了我的命名空间)因为它有助于std::每次减少输入.


e.J*_*mes 1

你只需要使用std::endl;. 或者,更好的是,使用方便的using指令:

#include <iostream>

using namespace std;

int main()
{
    cout << "hello world";
    cout << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • @克里斯:我不同意。虽然我肯定会避免在*头文件*中使用诸如“using namespace std;”之类的内容,但我认为它在源文件中完全没问题,尤其是像这样的简单文件。我认为没有理由用“std::”到处污染源文件,除非绝对必要。我也不想重复使用 STL 中已经使用过的名称。引入整个命名空间可以让我尽早发现这样的错误。 (2认同)