 Hey everybody, it's Brian. This is our seventh video tutorial on C++. I'm going to be covering a couple extra preprocessor directors you should know about if you're going to be working with header files. They can get very frustrating, very fast. As you can see, I'm including test.h and widget.h. Widget is just a blank header. I added that ahead of time for the sake of time. We're using the namespace std. We're calling say hello, which is located in header file test.h. Simply print out hello. Now go ahead and pause the video, and if you're typing along, just type all that out. I'm going to go ahead and run this. You can see it prints out hello. Now what we're going to do is we're going to copy this, paste it in here, call this say hello world. We want to include test.h, and we want to call the say hello function from within the header. If you're reading along in widget.h, we've included iostream. We've included test.h, this header file here that says say hello. We're using the namespace std, so we can just call cout and endel. We have a function called say hello world, which we'll call say hello, and then print out world. Let's actually copy that, paste it, and let's run it. Oh no, we get all sorts of errors. Already has a body. Say hello identifier not found. Notice how it jumps directly to widget.h and says say hello identifier is not found, but we've included test.h. Well, there's another one. Already has a body. Typically when you're debugging a C++ program, look for the first error. I guess that's kind of a given in any language, but it's really your key indicator what's going on here is already has a body. Function void say hello already has a body. So why is the error in say hello? We know this works. Well, what we're doing, if you think like the compiler thinks, we are including iostream, including test, including widget. And then when you include widget, it's including test again. So it's including test twice, once in main, once in widget. So what we need is some method of telling the compiler not to include this if it's already included. Fortunately, there's a preprocessor directed for that. If and def test underscore h, there's no dot. So that's the standard naming convention is all caps with an underscore. And then we're going to define test h. And then we're going to simply and if. Now remember anything that starts in a pound sign is a preprocessor directive, meaning it will be called before this is compiled. So when the compiler is going through your files, it's going to say if and def, which stands for if not defined test dot h, then define test dot h. And this is the definition for it. And here's an in def. If you know other programming languages, you know what an if if then statement is. And that's really all that is. If you don't know what an if then statement is, we'll be covering it soon. Now, when you run this program, sure enough, it compiles and runs perfectly fine. It says hello world. Now, you might be wondering why we haven't done it to widget h. Well, it's because we've been kind of lazy. You really should do that for every single header file you create. That way, if you include it multiple times, it doesn't try to declare it multiple times. Well, this is a short one. I thank you for watching. I hope you found this video educational and entertaining.