So background, I have a strong background in the Java programming language. I am a total noob when it comes to the C++ language. Basically I know that there are two different syntaxes for defining constructors in C++, I just do not understand the difference.

When writing the an exception constructor as follows (in a manor similar to a method without a return type), the compiler outputs a `no matching function for call to 'std::runtime_error::runtime_error()'` error:

```
#include <stdexcept>
using namespace std;

class DivideByZeroException : public runtime_error {
public :
    DivideByZeroException() {
        runtime_error("attempted to divide by zero.");
    }
};

```

But, when the constructor is modified to the following, the code compiles error-free:

```
#include <stdexcept>
using namespace std;

class DivideByZeroException : public runtime_error {
public :
    DivideByZeroException() :
        runtime_error("attempted to divide by zero."){};
};

```

Could someone please explain what is going on here?