Question: I have a big project (400 files) and all of the headers have include guards and everything, however I get 500 LNK2005 errors. 

Could it be that I have function bodies defined in some headers? Cause I saw the same things in the DirectX utility headers(DirectXCollision has some of it's functions are completely in the header).

Or could it be because they are using .inl files instead of .cpp?

Answer: 
Include guards will only save you from including the same header multiple times into the same compilation unit (one cpp file). If you include the header into a second cpp file and then link them together, both of them will have anything the header brings in. That's why it is usually a bad idea to have function implementations in the headers. 

You can work around that by declaring your function inline, then compiler will copy/paste them around.
Do you define global variables in your header files? That can be a cause of the error.
And include guards will not help. 

A global variable should be defined only in one translation unit and should be externed in all other translational unit.

For eg.
in x.h, you have

```
int myVar;

```

Now you #include x.h in both a.cpp & b.cpp,
then you will get a linker error even if you had include guards in x.h

Because now myVar will get defined in both a.obj and b.obj and the linker will find 2 myVars.