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
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
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
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."
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
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
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
Please check your facts before making such suggestions.
-Mike
HTH,
--ag
--
Artie Gold -- Austin, Texas
Oh, for the good old days of regular old SPAM.
No.
#include <iostream>
int main()
{
std::cout << "Hello\n";
return 0;
}
-Mike
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.
Jeff
Just looked in my "fact sack" and all looks
well. What facts are you unhappy with?
Mike