Another way to learn without learning by rote is that "is" is used in the Romance languages to indicate a state of being that is permanent, while "has"is used to indicate a state of being that is transient. Hunger, age, thirst, coldness and warmth are all transient states of being, so "has"is used.
If you treat French that way, you won't go wrong. If you say you do, you might find resistance.
However, it is a rule, in French, that if you have a group of female whatevers and if even only of them is known to be male you use the masculine form.
Similar to English. A group of actors is either a group of males, or a group where there is known to be at least one male, or the exact gender makeup is unknown. A group of actresses is known to be exclusively female. Even though the Academy awards people have changed their categories to avoid promoting this and there are some on this board that deny it exists both in English and French, it is certainly true in ordinary conversation.
To the people saying that "chaud" is an adverb modifying the verb "avons," this is wrong. "Chaud" is a
direct object of the verb. It answers the question "what do you have," not "how do you have."
In "Elle parle lentement", "lentement" is an adverb because it modifies the verb, saying that she speaks (how?) in a slow manner. In "Nous avons chaud", it is nonsense to say that we have (how?) in a warm manner. Nous avons faim (We have hunger) and Nous avons chaud (We have warmth).
In French, adjectives must agree in number and gender with the nouns they describe, hence "Les canards (noun) sont rouges (adjective)" is correct and would translate - literally - as "The ducks are reds". Nouns are not required to agree with one another, hence "Les canards (noun) avons chaud (noun)" is correct and would translate - literally - as "The ducks have heat".
Noun-adjective agreement may seem cumbersome and unncessary coming from English, but it has its uses, such as the fact that any French adjective can also be used as a noun. E.g. you can say "Les vieux (adjective used as noun) sont ici" in French, but you can't say "The olds are here." in English, you have to say "the old (adjective) people (noun)", or something of the kind.
Because "chaud" here is a singular masculine noun meaning "heat". No feminine form of this noun exists. Literaly translated "Nous avons chaud" means "We have heat". In contrast "chaud" and "chaude" are the masculine and feminine forms of the adjective "hot". E.g. "La journée a été très chaude" could translate as "The day has been very hot". http://fr.wiktionary.org/wiki/chaud
I found this page extremely helpful with chaud/froid: http://www.frenchtoday.com/blog/chaud-and-froid-in-french Hope it helps!
Can everyone on here please go and brush up on their French knowledge before wading in deciding how they think things should be said. This is the way the French express this. It just is!
The same way you say "J'ai vingt ans" for "I am 20". You can't decide that because we say "I am..." in English that you can go around saying "Je suis vingt ans" because that's how you think it should be!
Different languages have their own rules, but in English, "We are warm" is not synonymous with "We are hot" because they indicate different degrees of temperature. If we're warm, then we're in that range from perfectly comfortable to "it could be a little bit cooler, but otherwise we're okay". But if we're hot, then we're definitely uncomfortable and sweaty, and we're loosening our clothes, fanning ourselves, and wondering why we can't be where there's air conditioning.
If you would read the many comments on this page, you would know why. Anyway, in this particular sentence "chaud" functions as an adverb and thus it is invariable. Only adjectives agree as pertains to gender.
This was explained up above by StrikerFlux. Even if every single person in the group was female, you would still say "Nous avons chaud". "Chaud" is invariable when coupled with the verb "avoir" because it functions as an adverb in this sentence.