Включите больше раз класс в различных файлах в C ++ - PullRequest
2 голосов
/ 28 декабря 2011

У меня есть 4 класса: Server.cpp Logger.cpp Util.cpp Crypto.cpp

Класс Server использует объект Util.Программа работает нормально, но теперь мне нужно использовать объект Util также в классе Logger.Но когда я вставляю код #include «Util.cpp», g ++ выдает ошибку, потому что я не могу снова вызвать объект.Eclipse рассказал мне о «переопределении» и «предыдущем объявлении» класса Util.

Как я могу решить эту проблему?

Ответы [ 3 ]

7 голосов
/ 28 декабря 2011

Вы не должны включать исходные файлы cpp в другой файл cpp.
Это в основном нарушает Правило единого определения , что приводит к ошибкам переопределения.

Включите заголовочный файл с определением класса Util в любой класс, для которого вы хотите создать его объекты.

По сути, ваш код должен быть организован таким образом (исключение: шаблонный код):

Util.h -----------> Содержит определение класса Util действует как Интерфейс
Util.cpp -----------> Содержит реализацию класса Util действует как реализация

Здесь, когда вы хотите создать объект класса Util в любом из файлов cpp, вы включаете Util.h в этот файл cpp, чтобы компилятор знал определение класса Util.

Например:
Server.cpp хочет создать объект Util, тогда ваш Server.cpp должен включать Util.h как:

#include "Util.h"

Кроме того, не забудьте добавить Включить охрану в заголовочные файлы.

Если использование Util другим исходным / заголовочным файлом ограничено созданием указателя на Util, то вам не нужно включать заголовочный файл, вам нужно только Forwardнять класс Util.

1 голос
/ 28 декабря 2011

Вы должны вводить только заголовочный файл, например Util.h, а не файлы .cpp.Кроме того, убедитесь, что вы используете включить охранников.Если компилятор выдает ошибку для нескольких определений, возможно, вы пропустили включение защиты.

0 голосов
/ 28 декабря 2011

Вы объявляете свои классы в .h файлах (или .hpp) и помещаете реализацию в файлы `.cpp '.

Вы включаете только .h / .hppфайлы в других .h / .hpp или .cpp файлах, вы никогда не включаете .cpp файлы.

Убедитесь, что у каждого заголовочного файла есть защита от многократного включения, первая строка заголовочного файла .h / .hpp должно быть:

#pragma once
...