Say you and your partner are working on a project and you each have your folder of classes. Then when you try to put all your code together for a test you find that some of your class names are the same.

This often happens when working with big projects/libraries

Solution:

  namespace yourname {
	...
}
  

EX:

your code

  namespace AnthonyCode{
	class Pilk{
		...
	};
}
  

someone else’s code

  namespace BingusCode{
	class Pilk{
		...
	};
}
  
  int main(){
	AnthonyCode::Pilk p; // using your class
	BingusCode::Pilk p;  // using your friends class
}
  

Think of namespaces as if you have manually added to the front of your class name

your code

  class AnthonyCode_Pilk{
	...
};
  

someone else’s code

  class BingusCode_Pilk{
	...
};
  
  int main(){
	AnthonyCode_Pilk p; // using your class
	BingusCode_Pilk p;  // using your friends class
}
  
Note:Anything inside the `namespace` brackets now needs to have the prepended name before it.

Other ways of using namespaces

  namespace AnthonyCode{
	class Pilk{
		...
	};
}
  
  namespace AnthonyCode{
	int main(){
		Pilk p(); // Note you don't need the AnthonyCode:: anymore
	}
}
  

OR

  using namespace AnthonyCode;

int main(){
	Pilk p(); // Note you don't need the AnthonyCode:: anymore
}
  
Notename spaces are a thing in other languages like python or java
  TODO: make 2 name spaces example