The problem I am having is creating an object in main() using the overloaded Marble() functions. In the code fragment of main I have commented "//ref1" "//ref2" so you can easily help. The header file is at the bottom of this post.

Code:
#include "std_lib_facilities.h"
#include "marble.h"

int main(){
	//Marble();			
	//Marble m1;			
	m1.Marble();		//ref 1
	Marble("red");		//ref 2
}
Question for //ref1. Why does this not work? When I run it i get the error:
error: invalid use of `class Marble'

and

Question for //ref2. Why does this not allow me to access the function Marble(Color c);? The error i get when I try this is:
error: no matching function for call to `Marble::Marble(const char[4])'
marble.h:13: note: candidates are: Marble::Marble(const Marble&)
marble.h:54: note: Marble::Marble(Marble::Color, Marble::Size)
marble.h:48: note: Marble::Marble(Marble::Size)
marble.h:42: note: Marble::Marble(Marble::Color)
marble.h:36: note: Marble::Marble()

Code:
#ifndef MARBLE_H_
#define MARBLE_H_

#include <iostream>

using namespace std;

class Marble
{
public:
  enum Color {red, blue, yellow, green};
  enum Size {small, medium, large};

private:
  Color color;
  Size  size;

  // internal functions

  int random_color(){
  return (rand()%4);
  }

  int random_size(){
  return (rand()%3);
  }


public:
  // constructors
  // write 4 constructors here:
  Marble(){			// -- random color and size
	  color = (Color)this->random_color();
	  size = (Size)this->random_size();
	  cout<<"The Marble has color:  "<<color<<" and size:  "<<size<<"\n\n";
  }

  Marble(Color c){							// -- given color, random size
	  color = c;
	  size = (Size)this->random_size();
	  cout<<"The Marble has color:  "<<color<<" and size:  "<<size<<"\n\n";
  }

  Marble(Size s){
	  color = (Color)this->random_color();	// -- random color, given size
	  size = s;
	  cout<<"The Marble has color:  "<<color<<" and size:  "<<size<<"\n\n";
  }

  Marble(Color c, Size s){					// -- given color and size
	  color = c;
	  size = s;
	  cout<<"The Marble has color:  "<<color<<" and size:  "<<size<<"\n\n";
  }

  // utility functions
  Color get_color() const
  {
  return (Color)color;
  }
  //------------------------------
  Size get_size() const
  {
  return (Size)size;
  }

  bool operator==(const Marble m) const;

  friend ostream& operator<<(ostream& os, const Marble& m);
};


#endif