2013-04-06 2 views
0

Я делаю проект для школы с использованием C++, проект разбивается на несколько файлов.Где я могу поставить команды препроцессора при использовании нескольких файлов?

test_driver.cpp - a file to test the code written 
storage.cpp - implementation file for storage class and methods 
storage.h - header file for storage 
song.cpp - implementation file for song class, songs are the data type being manipulated by storage 
song.h - header file for song 

Где я могу разместить свои #includes. Хранение зависит от типа данных песни, поскольку оно в основном манипулирует ими, меняет названия и перемещает их и т. Д. Извините, если это похоже на новый вопрос, но я действительно не знаю, и не нашел надежного ответа , Я также хотел бы объявить глобальную константу для совместного использования между файлами реализации, возможно ли это?

ответ

0

Попробуйте это (для каждого файла CPP, я перечисляя ч файлы вы должны включить внутри него):

song.cpp 
    song.h 

storage.cpp 
    storage.h 
    song.h 

В качестве альтернативы, если storage.h также зависит от song.h (то есть, он использует определения из него), вы могли бы сделать:

storage.h 
    song.h 

storage.cpp 
    storage.h 

Как константу, почему вы не определите

constants.h 

и включить его в случае необходимости?

+0

и для зависимостей, таких как fstream и iostream, следует ли включать их в файлы реализации, если это необходимо? Но используйте препроцессор #ifndef, чтобы гарантировать, что ничего не копируется более одного раза? Спасибо за идею constants.h. – user1768079

+0

зависит от того, используют ли ваши файлы h также определение из streams/iostreams или нет; если они этого не делают (или вы можете переслать их объявить), тогда лучше всего включить файлы h только из файла cpp, так как это уменьшит ваш график зависимостей (см. Lakos). – sergio

1

Мое мнение таково, что каждый заголовочный файл должен быть включен без программирования, чтобы программист не помнил, что еще нужно включить. Этого не всегда можно достичь, но я думаю, что это правильное правило.

Другими словами, если «storage.h» требует что-то, заявленное в «song.h», тогда оно должно включать в себя «song.h» - таким образом, любому, кто использует «storage.h», также не нужно помните о включении «song.h».

Если, скажем, «storage.h» также использует что-то из «fstream», тогда он должен включать «fstream».

Другими словами, если вы включили файл «storage.h» в файл, это все, что вам нужно сделать, чтобы использовать класс «storage».

+0

Спасибо, вот как я к этому отношусь, но я новичок в C++ и не был уверен, что такое конвенция. – user1768079

Смежные вопросы