3
votes

I realize that there are several duplicates like this but none of them have worked for me so far. I am trying to compile a C++ very simple program on Ubuntu using g++ but it is giving me scope errors.

#include <iostream>
using namespace std;

int main()
{
  cout << "Hello world";
}

This gives me this error:

sudo g++ -v test.c
test.c: In function ‘int main()’:
test.c:7:3: error: ‘cout’ was not declared in this scope

I also tried defining the scope as many other posts say, but that also didn't work, but gave me a different error:

#include <iostream>

int main()
{
  std::cout << "Hello world";
}

Gives error:

test.c: In function ‘int main()’:
test.c:6:3: error: ‘cout’ is not a member of ‘std’

Most of the suggestions online suggest "using namespace std;", "#include " and "std::cout". So I tried all 3 together, still no luck :(

#include <iostream>
using namespace std;

int main()
{
  std::cout << "Hello world";
}

gives error:

test.c: In function ‘int main()’:
test.c:7:3: error: ‘cout’ is not a member of ‘std’

I have gone through several forums online but none of them seem to work for me :(

This is a part of a bigger issue because of which one of my linux make doesn't work.

Btw, I am using g++ and not gcc as a few posts messed up.


EDIT 1:

I changed the name to .cpp, and execute without sudo. Here is the verbose output:

pranoy@pranoyubuntu1210:~/Desktop/SIP/SIPp/sipp-3.3$ g++ -v test.cpp -o test
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.7.2-2ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) 
COLLECT_GCC_OPTIONS='-v' '-o' 'test' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/4.7/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE test.cpp -quiet -dumpbase test.cpp -mtune=generic -march=x86-64 -auxbase test -version -fstack-protector -o /tmp/cczzibvL.s
GNU C++ (Ubuntu/Linaro 4.7.2-2ubuntu1) version 4.7.2 (x86_64-linux-gnu)
    compiled by GNU C version 4.7.2, GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.7
 /usr/include/c++/4.7/x86_64-linux-gnu
 /usr/include/c++/4.7/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
GNU C++ (Ubuntu/Linaro 4.7.2-2ubuntu1) version 4.7.2 (x86_64-linux-gnu)
    compiled by GNU C version 4.7.2, GMP version 5.0.2, MPFR version 3.1.0-p3, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 521527ea42f0901bf839bcaad0cb13e6
test.cpp: In function ‘int main()’:
test.cpp:5:3: error: ‘cout’ is not a member of ‘std’
5
why do you need sudo to run g++? and file extension should be .cpp instead of .c?billz
Rename your source file to end with .cpp to give g++ the right clues.Bart Friederichs
You don't need using namespace std and it is a bad suggestion anyway.juanchopanza
I was originally using cpp instead, but that also had the exact issue. Just double checked. Unfortunately no luck sudo was just another lame attempt on my part, removing sudo still has same issue. I am going crazy after this! could this be some issue with my compiler itself?sudoExclaimationExclaimation
Also not able to reproduce, even tried with the same sudo call and with a .c extension (though both should be fixed, of course - no need to use sudo, and use .cpp as extension)Andreas Fester

5 Answers

5
votes

What you've written works absolutely fine on my Ubuntu system, with the same version of g++.

It sounds like you haven't installed all of the necessary files for the C++ environment, or something isn't quite right with it. Try this:

$ sudo apt-get remove g++ libstdc++-6.4.7-dev
$ sudo apt-get install build-essential g++-multilib

(Run dpkg -l | grep libstdc++ to get the exact version of libstdc++ if the above fails)

5
votes

This isn't the case for this, but could be an answer to "error: ‘cout’ is not a member of ‘std’". I came here looking for help, so this might help someone else.

If you have a header file (header.h) where the last function/class declaration does not have a semi-colon after it:

#include <string>

function(std::string str)

And your c++ file includes this before iostream:

#include "header.h"
#include <iostream>

The function/class (function in this case) messes up the declarations in iostream. #include basically just pastes the text into the code. Adding the semi-colon can fix the problem.

Hope that helped someone. I think @Farhad has caught the actual problem in this question though.

1
votes

Rename file extension with .cpp . Complie source code by command gcc source.cpp -o output.out . GCC will automatically compile it as a C++ program.

1
votes

For C++ programs, use g++, not gcc. If you get errors that suggest your compiler cannot find the standard library, that's because you probably used gcc.

1
votes

(C++, Linux Terminal, no compiling error, but no prints into the Terminal), maybe try:

$ g++ yourcode.cpp
$ ./a.out

first line: g++ compiles your code.
second line: runs your compiled code.