Declaration error

Discussion in 'C++' started by Pierre Couderc, Jan 4, 2007.

  1. What do I do wrong?

    class CTest
    {
    public:
    CTest(int uu);
    };

    void ttt()
    {
    int uu=88;
    CTest(uu);
    CTest(88);
    }


    I get 2 errors that I do not understand on CTest(uu) with MSVC6 :
    error C2371: 'uu' : redefinition; different basic types
    error C2512: 'CTest' : no appropriate default constructor available

    I have a way CTest((int) uu); to get it working, but I would like to
    understand where is the problem...

    Thank you in advance

    Pierre Couderc
    Pierre Couderc, Jan 4, 2007
    #1
    1. Advertising

  2. Hi,

    > What do I do wrong?

    You forgot the names of the variables.

    > class CTest
    > {
    > public:
    > CTest(int uu);
    > };
    >
    > void ttt()
    > {
    > int uu=88;
    > CTest foo(uu);
    > CTest bar(88);
    > }

    This one should work.

    Bernhard 'berber' Berger
    Bernhard Berger, Jan 4, 2007
    #2
    1. Advertising

  3. Pierre Couderc

    Rolf Magnus Guest

    Pierre Couderc wrote:

    > What do I do wrong?
    >
    > class CTest
    > {
    > public:
    > CTest(int uu);
    > };
    >
    > void ttt()
    > {
    > int uu=88;
    > CTest(uu);
    > CTest(88);
    > }
    >
    >
    > I get 2 errors that I do not understand on CTest(uu) with MSVC6 :
    > error C2371: 'uu' : redefinition; different basic types
    > error C2512: 'CTest' : no appropriate default constructor available


    In
    CText(uu);

    the parens are superfluous. It means the same as

    CText uu;

    so in your first line in main, you define an int named uu, and in the next
    line, a definition of a default-contructed CText with the same name
    follows.
    Rolf Magnus, Jan 4, 2007
    #3
  4. Pierre Couderc

    mlimber Guest

    Pierre Couderc wrote:
    > What do I do wrong?
    >
    > class CTest
    > {
    > public:
    > CTest(int uu);
    > };
    >
    > void ttt()
    > {
    > int uu=88;
    > CTest(uu);
    > CTest(88);
    > }
    >
    >
    > I get 2 errors that I do not understand on CTest(uu) with MSVC6 :
    > error C2371: 'uu' : redefinition; different basic types
    > error C2512: 'CTest' : no appropriate default constructor available
    >
    > I have a way CTest((int) uu); to get it working, but I would like to
    > understand where is the problem...


    You forgot the object name, and the compiler thinks you're declaring a
    CTest object by the name of uu, but there is already an int by that
    name in the current scope. Try:

    CTest c( uu ); // Works fine

    This problem is similar to the one described in this FAQ:

    http://parashift.com/c -faq-lite/ctors.html#faq-10.19

    Cheers! --M
    mlimber, Jan 4, 2007
    #4
  5. Bernhard Berger wrote:
    > Hi,
    >
    >> What do I do wrong?

    > You forgot the names of the variables.
    >
    >> class CTest
    >> {
    >> public:
    >> CTest(int uu);
    >> };
    >>
    >> void ttt()
    >> {
    >> int uu=88;
    >> CTest foo(uu);
    >> CTest bar(88);
    >> }

    > This one should work.
    >
    > Bernhard 'berber' Berger


    Just to suggest something on posting practices: NEVER correct
    the posting to which you respond by changing the text which you
    quote. ALWAYS place your corrections after the text which you
    are correcting. Do it like this:

    [original text, which you quote:]
    > int uu=88;
    > CTest(uu);
    > CTest(88);

    [your correction:]
    CTest foo(uu);
    CTest bar(88);

    Otherwise it seems that the original poster (whose message you
    quoted) did everything right in the first place.

    V
    --
    Please remove capital 'A's when replying by e-mail
    I do not respond to top-posted replies, please don't ask
    Victor Bazarov, Jan 4, 2007
    #5
  6. Pierre Couderc a écrit :
    > What do I do wrong?
    >
    > class CTest
    > {
    > public:
    > CTest(int uu);
    > };
    >
    > void ttt()
    > {
    > int uu=88;
    > CTest(uu);
    > CTest(88);
    > }
    >
    >
    > I get 2 errors that I do not understand on CTest(uu) with MSVC6 :
    > error C2371: 'uu' : redefinition; different basic types
    > error C2512: 'CTest' : no appropriate default constructor available
    >
    > I have a way CTest((int) uu); to get it working, but I would like to
    > understand where is the problem...
    >
    > Thank you in advance
    >
    > Pierre Couderc


    My (bad)idea was that it was not necessary to declare an explicit name
    as the constructor of CTest makes all the work....


    Thank you all.
    Pierre Couderc
    Pierre Couderc, Jan 4, 2007
    #6
  7. Pierre Couderc wrote:
    > Pierre Couderc a écrit :
    >> What do I do wrong?
    >>
    >> class CTest
    >> {
    >> public:
    >> CTest(int uu);
    >> };
    >>
    >> void ttt()
    >> {
    >> int uu=88;
    >> CTest(uu);
    >> CTest(88);
    >> }
    >>
    >>
    >> I get 2 errors that I do not understand on CTest(uu) with MSVC6 :
    >> error C2371: 'uu' : redefinition; different basic types
    >> error C2512: 'CTest' : no appropriate default constructor available
    >>
    >> I have a way CTest((int) uu); to get it working, but I would like to
    >> understand where is the problem...
    >>
    >> Thank you in advance
    >>
    >> Pierre Couderc

    >
    > My (bad)idea was that it was not necessary to declare an explicit name
    > as the constructor of CTest makes all the work....


    To overcome the "what looks like a declaration is a declaration" issue
    in your code, surround the type with parens, not the value:

    (CTest)uu;

    It stops being a declaration and achieves the same point: constructing
    a temporary of type CTest from 'uu'. The compiler can still optimize it
    away, though. You should consider a simple stand-alone function.

    V
    --
    Please remove capital 'A's when replying by e-mail
    I do not respond to top-posted replies, please don't ask
    Victor Bazarov, Jan 4, 2007
    #7
    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. Noah
    Replies:
    5
    Views:
    942
  2. Alex Vinokur
    Replies:
    4
    Views:
    563
    Jonathan Turkanis
    Apr 5, 2004
  3. Ovidesvideo
    Replies:
    4
    Views:
    466
    Andrey Tarasevich
    Dec 10, 2004
  4. kelvSYC
    Replies:
    6
    Views:
    7,201
    Richard Herring
    May 17, 2005
  5. Replies:
    4
    Views:
    1,041
    Richard Tobin
    Dec 12, 2006
Loading...

Share This Page