Detecting Input in the Start function (C#)

Hi everyone, I have following problem. I made a very simple Weapon pickup script(C#), not to extrem complex(I am still a novice at scripting). But the thing is every time I parent my gun to my camera it just flies away since the the function to parent the gun to the camera is called right after i press "F". Because my "F" input is called in the Update function the gun ,after a parented it, just keeps on flying. So I experimented around and found out the when I put my function to parent the gun to the camera in the start funcion it works perfectly, but the thing is you can't detect input int the Start function(or can you?). So it parents the gun to the camera when the game starts. Here is the script when the gun flies away:

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

public class weapon_pickup : MonoBehaviour {

          public List<Transform> weapons;

    public Transform selectedWeapon;
    public GameObject Ak47;

    public Transform cameraTransform = Camera.main.transform;
    public GameObject player; 

    // Use this for initialization
    void Start () {
    weapons = new List<Transform>();

    AddweaponsToList();

    }

    public void AddweaponsToList(){
      GameObject[] go = GameObject.FindGameObjectsWithTag("Weapon");    

        foreach(GameObject weapon in go)
               Addweapon(weapon.transform);

    }

    public void Addweapon(Transform weapon){

        weapons.Add(weapon);

    }

    // Update is called once per frame
    void Update () {
    SelectWeapon();

    }

    public void SelectWeapon(){
       float distance = Vector3.Distance(Ak47.transform.position, player.transform.position);
        Debug.Log(distance);

        if(Input.GetKeyUp(KeyCode.F) && distance < 2){

            selectedWeapon = weapons[0];
            Position_Ak();
        }

    }

    public void Position_Ak(){

        if(Input.GetKeyUp(KeyCode.F)){
        Ak47.transform.parent = cameraTransform; 
        //cameraTransform.localPosition = new Vector3(0,0,0);
        }

    }

}

Now when I call the Position_Ak function the start function it starts it right away. Also it gives me this error(But I can still play): 1. UnityEngine.Camera:get_main() weapon_pickup:.ctor()

2.ArgumentException: get_main can only be called from the main thread. Constructors and field initializers will be executed from the loading thread when loading a scene.

Maybe I am just to stupid to find the error (since I am a beginnerXD

Thanks in advance

Ps: Excuse my bad English`enter code here`

Don't rely on constructors, use the Start method:

    public Transform cameraTransform;

    void Start()
    {
       cameraTransform = Camera.main.transform;
   .... etc ...

PS You can use Vector3.zero instead of Vector3(0,0,0)