Why is it not Finding the Class I created in a nother Script

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class GameManager : MonoBehaviour {
	public List<Item> AllItems = new List<Item> ();

	[System.Serializable]
	public class Item{
		public string Name;
		public Texture2D Icon;
	}
}

Part 2 when I try and use it.

using UnityEngine;
using System.Collections;

public class ItemInstance : MonoBehaviour {
	public Item ThisItem;
	public MonoBehaviour Script;

}

Its A really simple bit of code bit I can not work out why it is not working I’m just trying to make a Inventory.

You placed the code for the Item class within the GameManager class, so it is a nested class of GameManager. You need to access it through GameManager, with GameManager.Item, or place the Item class outside the GameManager class.

Access nested class:

using UnityEngine;
using System.Collections;

public class ItemInstance : MonoBehaviour {
    public GameManager.Item ThisItem;
    public MonoBehaviour Script;
}

Or move class out of GameManager so it isn’t nested:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[System.Serializable]
public class Item {
    public string Name;
    public Texture2D Icon;
}

public class GameManager : MonoBehaviour {
    public List<Item> AllItems = new List<Item>();   
}