CX-Post: hello world

Discussion in 'C++' started by Tim Judd, Apr 14, 2004.

  1. Tim Judd

    Tim Judd Guest

    I must not be grasping anything here.

    Just a simple application, as follows (as any first-program is...)

    ----
    #include <iostream.h>

    int main() {
    cout <<"hello world";
    return 0;
    }
    ----

    never compiles! Tried it on FreeBSD, OpenBSD, Windows (under Visual C++ for
    Console App), OS X developer tools. THEY ALL complain!
    pretty much the same reason too!

    /tmp/ccJ31810.o: In function `main':
    /tmp/ccJ31810.o(.text+0xf): undefined reference to `cout'
    /tmp/ccJ31810.o(.text+0x14): undefined reference to
    `ostream::eek:perator<<(char const *)'
    collect2: ld returned 1 exit status


    But... I thought the #include was supposed to bring in the definitions from
    that file before checking the code for execution problems.

    I don't understand why it won't work, no matter the tutorials I see, books I
    read, articles I read! Can someone point me in the right direction, a
    utterly clueless newbie! (yes, I called myself that, so you can call me
    that ONCE, too!)

    Appreciate it in advance, email is spam-blocked, remove the single period
    PRIOR to the @ sign to reply by mail.

    --Tim
     
    Tim Judd, Apr 14, 2004
    #1
    1. Advertising

  2. Tim Judd

    Kelvin@!!! Guest

    well, you forgot something in ur code..
    first C++ standard encourages you to use
    #include <iostream>
    and cout should really be written as std::cout in your case

    if you dont want to write std::cout through out your whole program
    you should put
    using namespace std;
    before your main() function
    so that you can just write cout in the following lines

    and i also have a question here

    can i put the "using namespace bla" in the middle of my code?
    or can i make it effective in only a certain block of code??
    thank you very much
    --
    { Kelvin@!!! }
    "Tim Judd" <> wrote in message
    news:...
    > I must not be grasping anything here.
    >
    > Just a simple application, as follows (as any first-program is...)
    >
    > ----
    > #include <iostream.h>
    >
    > int main() {
    > cout <<"hello world";
    > return 0;
    > }
    > ----
    >
    > never compiles! Tried it on FreeBSD, OpenBSD, Windows (under Visual C++

    for
    > Console App), OS X developer tools. THEY ALL complain!
    > pretty much the same reason too!
    >
    > /tmp/ccJ31810.o: In function `main':
    > /tmp/ccJ31810.o(.text+0xf): undefined reference to `cout'
    > /tmp/ccJ31810.o(.text+0x14): undefined reference to
    > `ostream::eek:perator<<(char const *)'
    > collect2: ld returned 1 exit status
    >
    >
    > But... I thought the #include was supposed to bring in the definitions

    from
    > that file before checking the code for execution problems.
    >
    > I don't understand why it won't work, no matter the tutorials I see, books

    I
    > read, articles I read! Can someone point me in the right direction, a
    > utterly clueless newbie! (yes, I called myself that, so you can call me
    > that ONCE, too!)
    >
    > Appreciate it in advance, email is spam-blocked, remove the single period
    > PRIOR to the @ sign to reply by mail.
    >
    > --Tim
     
    Kelvin@!!!, Apr 14, 2004
    #2
    1. Advertising

  3. Tim Judd

    JaSeong Ju Guest

    Do this instead:

    #include <iostream>


    using namespace std;


    int main() {
    cout << "hello world" << endl;
    return 0;
    }



    iostream.h is deprecated, the standard C++ is to use
    iostream without .h

    the undefined reference to cout appeared because
    the "using namespace std" was not there.

    see http://www.research.att.com/~bs/bs_faq2.html
     
    JaSeong Ju, Apr 14, 2004
    #3
  4. Tim Judd

    JaSeong Ju Guest

    Do this instead:

    #include <iostream>


    using namespace std;


    int main() {
    cout << "hello world" << endl;
    return 0;
    }



    iostream.h is deprecated, the standard C++ is to use
    iostream without .h

    the undefined reference to cout appeared because
    you had iostream.h instead of iostream.

    see http://www.research.att.com/~bs/bs_faq2.html
     
    JaSeong Ju, Apr 14, 2004
    #4
  5. Tim Judd

    Buster Guest

    Re: CX-Post: hello world [OT in comp.lang.c, followup set]

    Tim Judd wrote:
    > I must not be grasping anything here.
    >
    > Just a simple application, as follows (as any first-program is...)
    >
    > ----
    > #include <iostream.h>
    >
    > int main() {
    > cout <<"hello world";
    > return 0;
    > }


    There shouldn't be a link error. Did you use
    "gcc" instead of "g++" for linking?

    --
    Regards,
    Buster.
     
    Buster, Apr 14, 2004
    #5
  6. "Tim Judd" <> wrote in message
    news:...
    > I must not be grasping anything here.
    >
    > Just a simple application, as follows (as any first-program is...)
    >
    > ----
    > #include <iostream.h>
    >
    > int main() {
    > cout <<"hello world";
    > return 0;
    > }
    > ----
    >
    > never compiles! Tried it on FreeBSD, OpenBSD, Windows (under Visual C++

    for
    > Console App), OS X developer tools. THEY ALL complain!
    > pretty much the same reason too!


    [snip]

    Clueless tutorials more like. The correct program is

    #include <iostream>

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

    <iostream> not <iostream.h>

    std::cout not cout

    return is unnecessary (not an error however).

    Get a decent book on C++, one that actually contains accurate and up to date
    information. I'd make a recommendation but I'd need to what what your
    general level of experience with programming is. Do you know any other
    languages for instance?

    john
     
    John Harrison, Apr 14, 2004
    #6
  7. > iostream.h is deprecated, the standard C++ is to use
    > iostream without .h
    >


    iostream.h is not deprecated, it is non-standard.

    Deprecated implies that it used to be standard, still is standard, but may
    become non-standard in the future. iostream.h has never been part of
    standard C++.

    john
     
    John Harrison, Apr 14, 2004
    #7
  8. Tim Judd wrote:

    > I must not be grasping anything here.


    *Why* did you cross-post this to comp.lang.c? They don't want to see
    your C++ programs over there. I suggest you apologize to that group, and
    be more careful in the future.

    >
    > Just a simple application, as follows (as any first-program is...)
    >
    > ----
    > #include <iostream.h>


    This is not a standard C++ header. Standard C++ uses <iostream>.

    >
    > int main() {
    > cout <<"hello world";


    cout resides in namespace std. You have to account for that somehow. For
    example, you can do this:

    std::cout << "hello world\n";

    Or this:

    using std::cout;
    cout << "hello world\n";

    Or this:

    using namespaces std;
    cout << "hello world\n:'

    But in any case you need to properly terminate your output with a
    newline if you want your code to be correct and portable.

    > return 0;
    > }
    > ----
    >


    It sounds like you need better tutorials. Most tutorials on the web are
    worse than useless. You might try Bruce Eckel's book, "Thinking in C++",
    which is free to download.

    -Kevin
    --
    My email address is valid, but changes periodically.
    To contact me please use the address from a recent posting.
     
    Kevin Goodsell, Apr 14, 2004
    #8
  9. JaSeong Ju wrote:

    > Do this instead:


    Please watch the cross-post list. Do not cross-post C++ code to comp.lang.c.

    >
    > #include <iostream>
    >
    >
    > using namespace std;
    >
    >
    > int main() {
    > cout << "hello world" << endl;
    > return 0;
    > }
    >
    >
    >
    > iostream.h is deprecated, the standard C++ is to use
    > iostream without .h


    iostream.h is not deprecated. The standard cannot deprecate what it does
    not contain, and iostream.h has never been standard C++.

    -Kevin
    --
    My email address is valid, but changes periodically.
    To contact me please use the address from a recent posting.
     
    Kevin Goodsell, Apr 14, 2004
    #9
  10. Please watch the cross-post list. Do not post about C++ in comp.lang.c.

    Also, please don't top-post. This is in the FAQ, section 5 (regarding
    netiquette).

    Kelvin@!!! wrote:

    > well, you forgot something in ur code..
    > first C++ standard encourages you to use
    > #include <iostream>
    > and cout should really be written as std::cout in your case
    >
    > if you dont want to write std::cout through out your whole program
    > you should put
    > using namespace std;
    > before your main() function
    > so that you can just write cout in the following lines
    >
    > and i also have a question here
    >
    > can i put the "using namespace bla" in the middle of my code?
    > or can i make it effective in only a certain block of code??


    Yes. It takes effect at the point in the source where it occurs, and
    continues until the end of the block in which it occurs, or the end of
    the translation unit if it's not inside a block.

    -Kevin
    --
    My email address is valid, but changes periodically.
    To contact me please use the address from a recent posting.
     
    Kevin Goodsell, Apr 14, 2004
    #10
  11. Tim Judd wrote:

    > I must not be grasping anything here.
    >
    > Just a simple application, as follows (as any first-program is...)
    >
    > ----
    > #include <iostream.h>
    >
    > int main() {
    > cout <<"hello world";
    > return 0;
    > }
    > ----
    >
    > never compiles!


    If you are going to post to comp.lang.c, post C. If you want to use
    C++, post to comp.lang.c++. For one of the two newsgroups you posted
    to, there is no <iostream.h> (or <iostream>) header, there is no
    predefined variable cout (or std::cout), and the symbol "<<" is always,
    other than in data or comments, a left shift operator. If the line
    containing 'cout' is intended to output the text "hello world", then the
    behavior of this program would, as well be undefined, since the last
    line of output does not end with an end-of-line '\n'.

    Here is your code, corrected for comp.lang.c:

    #include <stdio.h>
    int main(void)
    {
    puts("Hello world");
    return 0;
    }

    Follow-ups set to comp.lang.c++, since that where your question belongs.
     
    Martin Ambuhl, Apr 14, 2004
    #11
  12. Tim Judd

    Buster Guest

    John Harrison wrote:

    > Clueless tutorials more like. The correct program is
    >
    > #include <iostream>
    >
    > int main() {
    > std::cout <<"hello world";
    > }


    Wrong (you have to output a whole line).

    --
    Regards,
    Buster.
     
    Buster, Apr 14, 2004
    #12
  13. Tim Judd

    Rolf Magnus Guest

    Kevin Goodsell wrote:

    > Tim Judd wrote:
    >
    >> I must not be grasping anything here.

    >
    > *Why* did you cross-post this to comp.lang.c? They don't want to see
    > your C++ programs over there. I suggest you apologize to that group,
    > and be more careful in the future.


    Actually, it has more relevance than you might think. The OP seems to
    have compiled and linked his code with a C compiler, maybe because he
    doesn't actually know the difference between C and C++. The error
    message looks like the typical message you get if you try to link C++
    code using gcc instead of g++.

    > Or this:
    >
    > using namespaces std;
    > cout << "hello world\n:'


    I don't think that this will work ;-)
     
    Rolf Magnus, Apr 14, 2004
    #13
  14. Tim Judd

    Dan Pop Guest

    In <> Tim Judd <> writes:

    >I must not be grasping anything here.


    Most likely, since you appear to be a patent idiot. Otherwise, you'd have
    never crossposted your question to comp.lang.c.

    Dan
    --
    Dan Pop
    DESY Zeuthen, RZ group
    Email:
     
    Dan Pop, Apr 14, 2004
    #14
  15. "Martin Ambuhl" <> wrote in message
    news:c5iova$26900$-berlin.de...
    > Tim Judd wrote:
    >
    > > I must not be grasping anything here.
    > >
    > > Just a simple application, as follows (as any first-program is...)
    > >
    > > ----
    > > #include <iostream.h>
    > >
    > > int main() {
    > > cout <<"hello world";
    > > return 0;
    > > }
    > > ----
    > >
    > > never compiles!

    >
    > If you are going to post to comp.lang.c, post C. If you want to use
    > C++, post to comp.lang.c++. For one of the two newsgroups you

    posted
    > to, there is no <iostream.h> (or <iostream>) header, there is no
    > predefined variable cout (or std::cout), and the symbol "<<" is

    always,
    > other than in data or comments, a left shift operator. If the line
    > containing 'cout' is intended to output the text "hello world", then

    the
    > behavior of this program would, as well be undefined, since the last
    > line of output does not end with an end-of-line '\n'.
    >
    > Here is your code, corrected for comp.lang.c:
    >
    > #include <stdio.h>
    > int main(void)
    > {
    > puts("Hello world");
    > return 0;
    > }
    >


    Just a note: Using Dev-Cpp the OP code compiles and executes.
    There is a backward library which contains iostream.h that 1) includes
    iostream, and 2) has a bunch of using's for all the iostream
    functions.
    I am undecided if this is a good thing (allows new users to do dumb
    things) or a bad thing (allows new users to do dumb things).
    g++ does issue a warning message which reads
    #warning This file includes at least one deprecated or antiquated
    header. Please consider using one of the 32 headers found in section
    17.4.1.2 of the C++ standard. ...
    I believe this is all correct behaviour.
    --
    Gary
     
    Gary Labowitz, Apr 14, 2004
    #15
  16. Buster <> spoke thus:

    > Wrong (you have to output a whole line).


    If C++ is like C in this respect, it's actually implementation-defined
    whether a newline is required (isn't it?).

    --
    Christopher Benson-Manica | I *should* know what I'm talking about - if I
    ataru(at)cyberspace.org | don't, I need to know. Flames welcome.
     
    Christopher Benson-Manica, Apr 14, 2004
    #16
  17. Tim Judd

    Buster Guest

    Christopher Benson-Manica wrote:

    > Buster <> spoke thus:
    >
    >>Wrong (you have to output a whole line).

    >
    > If C++ is like C in this respect, it's actually implementation-defined
    > whether a newline is required (isn't it?).


    Exactly.

    --
    Regards,
    Buster.
     
    Buster, Apr 14, 2004
    #17
  18. Rolf Magnus wrote:

    > Kevin Goodsell wrote:
    >
    >
    >>Or this:
    >>
    >>using namespaces std;
    >>cout << "hello world\n:'

    >
    >
    > I don't think that this will work ;-)
    >


    Heh. Obviously I did actually manage to hit the shift key, but missed
    the quote key. After that I probably tried to fix it, and in my usual
    fashion hit some lengthy sequence of almost-but-not-quite-right keys,
    interspersed with several backspaces, until I had something that
    registered in my brain as being correct. Oh, well.

    -Kevin
    --
    My email address is valid, but changes periodically.
    To contact me please use the address from a recent posting.
     
    Kevin Goodsell, Apr 14, 2004
    #18
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Tim Judd

    CX-Post: hello world

    Tim Judd, Apr 14, 2004, in forum: C Programming
    Replies:
    7
    Views:
    384
    Dan Pop
    Apr 14, 2004
  2. Carl
    Replies:
    4
    Views:
    441
    Peter Hansen
    May 21, 2004
  3. vijay
    Replies:
    8
    Views:
    755
  4. Roy
    Replies:
    6
    Views:
    701
    Roedy Green
    Jan 7, 2008
  5. Larry
    Replies:
    27
    Views:
    491
    Michele Dondi
    Jan 25, 2005
Loading...

Share This Page