[VC++] C2512 no appropriate default constructor available

Pagina: 1
Acties:
  • 527 views sinds 30-01-2008
  • Reageer

  • Boy
  • Registratie: November 2001
  • Laatst online: 04-05 17:24

Boy

www.byoscoop.nl

Topicstarter
Deze vraag is nog niet op tweakers geweest en via google wordt je ook niet wijzer.

Ik heb het volgende (stukje van code):

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Cklasje : public CDialog
{
// Construction
public:
    Cklasje(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
    //{{AFX_DATA(Cklasje)
    enum { IDD = IDD_KLASJE_DIALOG };
    CEdit   m_infoBox;
    //}}AFX_DATA

...


nu doe ik:

C++:
1
2
3
Cklasje* m_infoDlg;

m_infoDlg = new Cklasje();


Nu krijg ik de volgende foutmelding

error C2512: 'Cklasje' : no appropriate default constructor available

Ik gok dat het iets te maken heeft met de aanroep van CDialog? Onder public staat toch de default constructor??

[ Voor 3% gewijzigd door Boy op 03-08-2005 09:50 ]

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 22:33

BoAC

Memento mori

Boy schreef op woensdag 03 augustus 2005 @ 09:49:
C++:
1
2
3
Cklasje* m_infoDlg;

m_infoDlg = new Cklasje;
De haken mag je weglaten als je de constructor gebruikt zonder parameters.

/edit
Mogen dus wel haken 8)7

[ Voor 9% gewijzigd door BoAC op 03-08-2005 10:02 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:44
Je hebt geen default constructor zonder argumenten.
Jouw constructor heeft één (optioneel) argument, maar ik weet niet of dat zo maar geldig is.

Maak gewoon 2 constructors, een zonder argumenten waarin je de parent op NULL zet, en één met argumenten, waarmee je een parent meegeeft.

https://fgheysels.github.io/


  • Boy
  • Registratie: November 2001
  • Laatst online: 04-05 17:24

Boy

www.byoscoop.nl

Topicstarter
BoAC schreef op woensdag 03 augustus 2005 @ 09:53:
[...]

De haken moet je weglaten als je de constructor gebruikt zonder parameters.
Is eigenlijk basis-kennis C++ denk ik ;)
Ik zou denken dat het niet veel uit zou maken, is er dan verschil als je de haken wel gebruikt?

Het geeft in ieder geval nog steeds hetzelfde resultaat...

[ Voor 44% gewijzigd door Boy op 03-08-2005 09:56 . Reden: quote zat er niet bij, dit is wat duidelijker naar wie ik reageer :) ]

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 22:33

BoAC

Memento mori

Heb je nog meer contructors in je Cklasje?

Sla ook ff de help erop na voor de CDialog welke constructors die heeft.
En post ook je implementatie van de constructor van Cklasje.

[ Voor 63% gewijzigd door BoAC op 03-08-2005 10:01 ]


  • Boy
  • Registratie: November 2001
  • Laatst online: 04-05 17:24

Boy

www.byoscoop.nl

Topicstarter
whoami schreef op woensdag 03 augustus 2005 @ 09:54:
Je hebt geen default constructor zonder argumenten.
Jouw constructor heeft één (optioneel) argument, maar ik weet niet of dat zo maar geldig is.

Maak gewoon 2 constructors, een zonder argumenten waarin je de parent op NULL zet, en één met argumenten, waarmee je een parent meegeeft.
Dat is die wat Visual zelf aanmaakt.

Dit is dus ook die standaard 'standaard constructor' welke hij aanmaakt:

C++:
1
2
3
4
5
6
7
Cklasje::Cklasje(CWnd* pParent /*=NULL*/)
    : CDialog(Cklasje::IDD, pParent)
{
    //{{AFX_DATA_INIT(Cklasje)
        // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
}


Nu heb ik dus het volgende toegevoegd (whoami, dit bedoel je?):

headerfile:
C++:
1
2
3
4
5
6
7
8
9
class Cklasje : public CDialog
{
// Construction
public:

    Cklasje();   // standard constructor
    Cklasje(CWnd* pParent);

...


c-file:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Cklasje::Cklasje(CWnd* pParent /*=NULL*/)
    : CDialog(Cklasje::IDD, pParent)
{
    //{{AFX_DATA_INIT(Cklasje)
        // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
}

Cklasje::Cklasje()
    : CDialog(Cklasje::IDD)
{

}

...


Same problem...

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • Boy
  • Registratie: November 2001
  • Laatst online: 04-05 17:24

Boy

www.byoscoop.nl

Topicstarter
OHOH, niet gaan schelden, maar ik had eerst een directe instantie (Cklasje m_infoDlg) in een andere class gemaakt en die was ik aan het omzetten naar een pointer. Ik wilde geen verwijzing naarf een .h file (klasje.h) in de file met die class.

Wat ik dus heb gedaan is een forward declaration van die class in die .h file gezet en vervolgens will ik een 'new' doen in de c-file van die class om de instantie te creeeren.

MAAAAAR, ik was vergeten de headerfile te includen in die c-file!

Hij zag de class dus door de forward declaratie in de header file, maar ik had dus geen definitie van de class nog!

Thanks for the help anyway :)

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 22:33

BoAC

Memento mori

Nevermind ;)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 18:42

curry684

left part of the evil twins

Vond het al vreemd dat het niet zou werken 8)7

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04-05 12:47

.oisyn

Moderator Devschuur®

Demotivational Speaker

whoami schreef op woensdag 03 augustus 2005 @ 09:54:
Je hebt geen default constructor zonder argumenten.
Jouw constructor heeft één (optioneel) argument, maar ik weet niet of dat zo maar geldig is.

Maak gewoon 2 constructors, een zonder argumenten waarin je de parent op NULL zet, en één met argumenten, waarmee je een parent meegeeft.
Nee, zijn specificatie is gewoon goed. Hij heeft een constructor met een optionele eerste parameter. Omdatie optioneel is hoef je 'm dus ook niet op te geven (anders heeft een optionele parameter weinig nut, denk je ook niet? :))

.edit: MSalters: wat is er dan precies kort door de bocht aan mijn reactie? Of dacht je dat ik ontkende dat hij geen default constructor heeft, whoami's eerste zin dus? Ik zie dat echter nergens terug in mijn reactie, ik zeg alleen dat z'n specificatie goed is en dat hij derhalve geen specifieke default constructor hoeft te definieren zonder parameters.

[ Voor 23% gewijzigd door .oisyn op 03-08-2005 14:34 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Dat is weer wat erg kort door de bocht .oisyn, maar je hebt op zich wel gelijk. Elke constructor die zonder argumenten aangeroepen kan worden is een default constructor, ook al heeft de declaratie ervan een optioneel argument.

De foutmelding is gewoon suf. Je hebt een incomplete class, geen enkele constructor en dan is de klacht dat je een default ctor mist. Duh, je mist wel meer. Aan de andere kant is VC++ niet gemaakt als educatieve tool dus heel erg is't ook weer niet ;)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

BoAC schreef op woensdag 03 augustus 2005 @ 09:53:
De haken mag je weglaten als je de constructor gebruikt zonder parameters.

/edit
Mogen dus wel haken 8)7
Je bent in de war met het volgende:
C++:
1
Cklasje foo();

Dat is een functie declaratie, en geen default constructed Cklasje object genaamd foo.

Toevoeging voor de TS; meestal wil je een enkele parameter ctor ook 'explicit' maken om problemen te voorkomen.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Nee hoor, BoAC is niet i de war. new X; is exact hetzelfde als new X( );

'explicit' is hier wel handig ja.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

MSalters schreef op woensdag 03 augustus 2005 @ 16:59:
Nee hoor, BoAC is niet i de war. new X; is exact hetzelfde als new X( );

'explicit' is hier wel handig ja.
Ja, ok. Maar daar maakt het niet zo veel uit, terwijl bij mijn voorbeeld er geen haken mogen (tenzij je een functie wilt declareren)
Boy schreef op woensdag 03 augustus 2005 @ 09:55:
Ik zou denken dat het niet veel uit zou maken, is er dan verschil als je de haken wel gebruikt?
Het geeft in ieder geval nog steeds hetzelfde resultaat...
Dus het was meer ter verduidelijking/aanvulling dan verbetering.
Pagina: 1