Do I have to typedef on every Header file?

c++, oop, typedef

Solution

All files that `#include "Foo.h"` you get the `typedef`. So no, you don't have to replicate it in every file (as long as it includes `Foo.h`. You can place the `typedef` in a dedicated file if that suits your needs. In your case, this would make sense and would be an improvement, because `Bar.h` should not rely on the fact that `Foo.h` has the `typedef` and the necessary includes.

I would keep it simple and limit it to one type though, to be included in all files that use the type:

// StringVector.h
#ifndef STRINGVECTOR_H_
#define STRINGVECTOR_H_

#include <vector>
#include <string>

typedef std::vector< std::string > StringVector;

#endif

Problem

Let's say I have an `std::vector` of `std::string`s. ``` // Foo.h class Foo { std::vector< std::string > mVectorOfFiles; } ``` Then I used `typedef` to make it a `StringVector` type. ``` // Foo.h typedef std::vector< std::string > StringVector; class Foo { StringVector mVectorOfFiles; } ``` If I have another class which takes a `StringVector` object... ``` // Bar.h class Bar { Bar( const StringVector & pVectorOfFiles ); // I assume this produces a compile error (?) since Bar has no idea what a StringVector is } ``` ... do I have to use `typedef` again in the header file for `Bar`? ``` // Bar.h typedef std::string< std::vector > StringVector; class Bar { Bar( StringVector pListOfFiles ); } ``` Is it possible to place the `typedef std::vector< std::string > StringVector` in a single file and have every other class know of the type `StringVector`?

Original source