Declaration error

P

Pierre Couderc

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
 
R

Rolf Magnus

Pierre said:
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.
 
M

mlimber

Pierre said:
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
 
V

Victor Bazarov

Bernhard said:
Hi,

You forgot the names of the variables.

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
 
P

Pierre Couderc

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
 
V

Victor Bazarov

Pierre said:
Pierre Couderc a écrit :

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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,578
Members
45,052
Latest member
LucyCarper

Latest Threads

Top