Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Iostream

1 view
Skip to first unread message

ncstate

unread,
Oct 23, 2003, 5:25:07 PM10/23/03
to

it seems when i try to compile this simple code I get an error message i
believe is from g++ not finding the IOSTREAM header file. i found the
header file in /usr/include/c++/3.2.2/ so that is why it is included
like that. suggestions?

I'm running red hat 9

code :

#include </usr/include/c++/3.2.2/iostream>

int main()

{

cout << endl << endl << "Jeff" << endl;

cout << "E115 Sec 010 B" << endl;

cout << "Hello World" << endl << endl << endl;

return 0;

}

errors:

project2.C: In function `int main()':

project2.C:6: `cout' undeclared (first use this function)

project2.C:6: (Each undeclared identifier is reported only once for each

function it appears


--
Posted via http://dbforums.com

Victor Bazarov

unread,
Oct 23, 2003, 6:33:43 PM10/23/03
to
"ncstate" <membe...@dbforums.com> wrote in message
news:3517496.1...@dbforums.com...

The 'cout' object is declared in the 'std' namespace. You should
either prefix it with "std::" or declare that you're using that
name:

using std::cout;
using std::endl; // as well

Get a decent book on C++.

Victor


Mike Wahler

unread,
Oct 23, 2003, 6:42:44 PM10/23/03
to
"ncstate" <membe...@dbforums.com> wrote in message
news:3517496.1...@dbforums.com...
>
> it seems when i try to compile this simple code I get an error message i
> believe is from g++ not finding the IOSTREAM header file.

No, it's telling you it cannot find the declaration of
an identifier you've used ('cout').

>i found the
> header file in /usr/include/c++/3.2.2/ so that is why it is included
> like that. suggestions?

Don't include it 'like that'.

> I'm running red hat 9

This doesn't matter. C++ is a platform independent language.

> code :
>
> #include </usr/include/c++/3.2.2/iostream>

Change to:

#include <iostream>

If this does not work, then your compiler is installed
and/or configured incorrectly.

Note that from the language's perspective <iostream> is a
standard *header* name, it does *not* signify a "file" name.
Many if not most implementations do provide an actual file
with the same or a similar name to implement a standard header,
but this is an implementation detail, not specified or
required by the language. E.g. a compiler could provide the
required declarations as 'hard coded' if it wanted and would
still be conforming -- the #include statement would still be
required however).

[Gratuitous whitespace removed from code below]

> int main()
> {
> cout << endl << endl << "Jeff" << endl;
> cout << "E115 Sec 010 B" << endl;
> cout << "Hello World" << endl << endl << endl;
>
> return 0;
> }
>
> errors:
>
> project2.C: In function `int main()':
>
> project2.C:6: `cout' undeclared (first use this function)

This is because 'cout' (and all standard library identifiers
except macros are declared in namespace 'std').

> project2.C:6: (Each undeclared identifier is reported only once for each
>
> function it appears

#include <iostream>

int main()
{
std::cout << "Hello world\n";
return 0;
}


or


#include <iostream>

using std::cout;

int main()
{
cout << "Hello world\n";
return 0;
}


or


#include <iostream>

using namespace std;

int main()
{
cout << "Hello world\n";
return 0;
}

(If desired, the scope of 'cout' can be further restricted
by putting the 'using' directive or declaration inside the
'main()' function.)

Note: while most implementations will work without it,
the declaration for 'endl' is provided by <ostream>.
It is allowed to be, but not required to be, provided by
<iostream>. 'endl' is also in namespace 'std'. (Its
'full name' is 'std::endl')

BTW, which C++ book(s) are you reading?

-Mike


David Rubin

unread,
Oct 23, 2003, 6:41:38 PM10/23/03
to
ncstate wrote:
[snip - rearranged]
> #include </usr/include/c++/3.2.2/iostream>

You can just #include <iostream>

> int main()
> {
> cout << endl << endl << "Jeff" << endl;

[snip]


> project2.C: In function `int main()':
> project2.C:6: `cout' undeclared (first use this function)
> project2.C:6: (Each undeclared identifier is reported only once for each
> function it appears

Try std::cout and std::endl or 'using namespace std;' I found this
diagnostic a bit confusing too the first time I saw it.

/david

--
"As a scientist, Throckmorton knew that if he were ever to break wind in
the echo chamber, he would never hear the end of it."

Jonathan Mcdougall

unread,
Oct 23, 2003, 6:29:25 PM10/23/03
to
> it seems when i try to compile this simple code I get an error
> message i believe is from g++ not finding the IOSTREAM header file. i
> found the header file in /usr/include/c++/3.2.2/ so that is why it is
> included like that. suggestions?
>
> I'm running red hat 9
>
> #include </usr/include/c++/3.2.2/iostream>

I don't know about the requirements of the standard about that, but imho, if
your compiler forces you to specify such a path, it is broken. Ask in a
newsgroup supporting it

http://www.parashift.com/c++-faq-lite/how-to-post.html#faq-5.9

> int main()
> {
>
> cout << endl << endl << "Jeff" << endl;

<snip>

> errors:
> project2.C: In function `int main()':
>
> project2.C:6: `cout' undeclared (first use this function)

'cout' is defined in the std namespace (as all standard functions, classes
and objects are), so you must explictly refer to it :

std::cout << std::endl << "Jeff" << std::endl;

Or look up using directive and declaration.


Jonathan


Mike Wahler

unread,
Oct 23, 2003, 6:52:34 PM10/23/03
to
"David Rubin" <full...@warpmail.net> wrote in message
news:COYlb.9479$ri.24...@twister.nyc.rr.com...

> > project2.C: In function `int main()':
> > project2.C:6: `cout' undeclared (first use this function)
> > project2.C:6: (Each undeclared identifier is reported only once for each
> > function it appears
>
> Try std::cout and std::endl or 'using namespace std;'

or:


using std::cout;
using std::endl;

>I found this


> diagnostic a bit confusing too the first time I saw it.

"'cout' undeclared." Exactly the case. How much more specific
could it be? :-)

Before you say e.g. "well the compiler should 'know' it's a
'namespace std' issue, I'll say that no, it cannot (and should not)
make such an assumption. I might want an identifer of my own named
e.g. 'cout', which I have every right to define, in either a 'global',
'file', 'namespace'*, or 'local' scope, and expect no problems until I
explicitly cause a conflict with a 'using' statement which brings
'std::cout' into scope.

(*) except namespace 'std', where the 'user' is not
allowed to define anything.


OP's problem is not an 'ambiguous' error message, but insufficient
background knowledge before using the compiler.

-Mike


MPBroida

unread,
Oct 23, 2003, 6:39:39 PM10/23/03
to
ncstate wrote:
>
> it seems when i try to compile this simple code I get an error message i
> believe is from g++ not finding the IOSTREAM header file. i found the
> header file in /usr/include/c++/3.2.2/ so that is why it is included
> like that. suggestions?
>
> I'm running red hat 9
>
> code :
>
> #include </usr/include/c++/3.2.2/iostream>
>

It's been a little while, but I seem to recall that
including a file from the "builtin" include dirs is
done via:
#include <filename>
That tells the compiler to use its own include path(s).

But including a USER file is done via:
#include "filename"
That tells the compiler to use the include paths from
the compile commandline (or defaults)(or project/etc).

Try changing the < and > to " and " and see what
happens.

Mike

Mike Wahler

unread,
Oct 23, 2003, 6:54:46 PM10/23/03
to

"MPBroida" <michael.p.broida@boeing_oops.com> wrote in message
news:3F9858AB.2DF20187@boeing_oops.com...

Please check your facts before making such suggestions.

-Mike


ncstate

unread,
Oct 23, 2003, 7:42:40 PM10/23/03
to

Thanks for the help. the only thing that i seemed to find that worked
was to #include <iostream.h> and it gives me a depreciation message but
compiles and runs fine. is this normal for g++ 3.2.2?? it compiles fine
with #include <iostream> with g++ 2.8.1? should i just keep using the .h
extention and ignore the message?

Artie Gold

unread,
Oct 23, 2003, 8:44:44 PM10/23/03
to
No, you should use <iostream> -- which is the proper header -- and
correct your *code*.

HTH,
--ag
--
Artie Gold -- Austin, Texas
Oh, for the good old days of regular old SPAM.

Mike Wahler

unread,
Oct 23, 2003, 9:35:25 PM10/23/03
to

"ncstate" <membe...@dbforums.com> wrote in message
news:3517890.1...@dbforums.com...

No.

#include <iostream>

int main()
{
std::cout << "Hello\n";
return 0;
}

-Mike


David Rubin

unread,
Oct 24, 2003, 12:09:34 AM10/24/03
to
Mike Wahler wrote:
[snip]

>>I found this
>>diagnostic a bit confusing too the first time I saw it.
>
> "'cout' undeclared." Exactly the case. How much more specific
> could it be? :-)
>
> Before you say e.g. "well the compiler should 'know' it's a
> 'namespace std' issue, I'll say that no, it cannot (and should not)
> make such an assumption.

I wasn't suggesting that.

> OP's problem is not an 'ambiguous' error message, but insufficient
> background knowledge before using the compiler.

This is more like it. After years of not using std::, I am sometimes
bewildered when the compiler can't find declarations I know
exist...somewhere.

ncstate

unread,
Oct 24, 2003, 1:09:13 AM10/24/03
to

Thanks for all the help.. Sorry I didn't catch on before. All of the
posts were helpful and appriciated.

Jeff

MPBroida

unread,
Oct 24, 2003, 4:08:20 PM10/24/03
to

Just looked in my "fact sack" and all looks
well. What facts are you unhappy with?

Mike

0 new messages