Sunny
Sunny

Reputation: 241

C++ compiler error: "return type specification for constructor invalid"

Here's my code. When compiling all the files I get this error, I am not sure what I am doing wrong. Please advise.

Molecule.cpp:7:34: error: return type specification for constructor invalid

//Sunny Pathak
//Molecule.cpp    
#include <iostream>
#include "Molecule.h"    
using namespace std;

inline void Molecule::Molecule(){
       int count;
       count = 0;
}//end function

bool Molecule::read(){
    cout << "Enter structure: %c\n" << structure << endl;
    cout << "Enter full name: %c\n" << name << endl;
    cout << "Enter weight   : %f\n" << weight << endl;
}//end function


void Molecule::display() const{
    cout << structure << ' ' << name << ' ' << weight << ' ' << endl;
}//end function

Upvotes: 23

Views: 54348

Answers (4)

Elliot Woods
Elliot Woods

Reputation: 844

This same error message can occur when :

  • Class is defined in H file but is missing semicolon
  • Your CPP file includes the H file, and also begins with the definition for the class constructor.

The compiler will then see your class definition as the return type for the constructor method, and throw this error. If that's the case, then the fix is to add the semicolon.

Note : this is not the case in the OP's example, but the error reported (and hence title of this question post) would be the same.

Upvotes: 2

billz
billz

Reputation: 45410

Constructor can not have return type.

update:

inline void Molecule::Molecule(){
       ^^^
       int count;
       count = 0;
}//end function

to:

Molecule::Molecule(){
       int count;
       count = 0;
}//end function

Upvotes: 2

Andy Prowl
Andy Prowl

Reputation: 126442

You're writing a constructor with a return type. Constructors have no return type. Just change your constructor definition into:

/* void */ Molecule::Molecule()
// ^^^^ Remove this
{
    int count;
    count = 0;
}

Upvotes: 4

juanchopanza
juanchopanza

Reputation: 227418

A constructor has no return type:

class Molecule
{
 public:
  Molecule();  // constructor. No return type.
  bool read();
  void display() const;
};

Molecule::Molecule(){
       int count;
       count = 0;
}//end constructor

Also note that count is local to the body of the constructor, and you are not using it for anything.

Upvotes: 27

Related Questions