Help, What am i doing wrong here,

ive tried multiply answers that have been submitted and none work.
using unity 5.5 personal edition

I wanna check a bool in another script, does both the scripts have to be attached to the same object?
private maincontroller MCT;

void Start () {
maincontroller MCT = GetComponent();
}
When i try to use MCT in the update function it says…
if(MCT.isDead==true) { } <—error

“NullReferenceException: Object reference not set to an instance of an object”

Yes, it has to be attached to the same gameobject if you are just doing GetComponent<maincontroller>(). If it is attached to a different gameobject you can do: GameObject.Find("NAME").GetComponent<maincontroller>() or any of the various methods to find/Access a gameobject.

Another way that might be viable and imo much easier is you introduce a static class e.g. GameState. Since it is static you can access it from anywhere in your code without attaching it to anything and searching for it.

In addition to ASPepeX’s answer You may simply add a public field to your class:

  class MyMainControllerUser: MonoBehaviour
    {
     public maincontroller MCT;

     void Update()
     {
    	if(MCT.isDead == true) { }
     }
}

And then in the editor simply drag and drop from Hierarchy View the game object that has maincontroller script into your MyMainControllerUser Inspector View field.

Another option (if You want to keep your field private) is to mark it for serialization:

   class MyMainControllerUser: MonoBehaviour
            {
             [SerializeField]
             private maincontroller MCT;
             
             void Update()
             {
            	if(MCT.isDead == true) { }
             }
        }

And yet another one option, especially if your game object script is Game Controller-kind, the best option here is Singleton pattern:
http://wiki.unity3d.com/index.php/Singleton

Btw, be advise that GameObject.Find is quite heavy function and shouldn’t be called frequently (for example in every Update step).