0

I have a main routine that has two class objects. One class has no parameters. The other class has 1 parameter. The class with no parameters does not execute. Why not?

Main.cpp: ...

#include "Dummy1.h"
#include "Dummy2.h"

int main()
{
  int x = 0;
  Dummy1 First();       //This  doesn't execute.
  Dummy2 Second(x); //This does.

  return 0;
}

...

Dummy1.cpp: ...

#include "Dummy1.h"
#include <iostream>
using namespace std;

//This one has no parameters.
Dummy1::Dummy1()
{
  cout << "Dummy1\n" ;
}

Dummy1::~Dummy1()
{
}

...

Dummy2.cpp: ...

#include "Dummy2.h"
#include <iostream>
using namespace std;

//This one has a parameter that is unused.
Dummy2::Dummy2(int a)
{
  cout << "Dummy2\n";
}

Dummy2::~Dummy2()
{
}

...

Output: ...

Dummy2

...

Rusty
  • 23
  • 4

1 Answers1

3

you came across most vexing parse. In short, C++ compiler will assume that your code is a function declaration, if this code can be perceived as a function declaration. To call the default constructor, you need to remove the parentheses, or write in curly braces.

So in code

SomeClass a();// func declaration
SomeClass b;  // default constuctor
SomeClass c{};// initializer list consturctor or default constructor
Deumaudit
  • 978
  • 7
  • 17