Я работаю над проектом на C++.Классы, мешающие друг другу при компиляции
У меня был класс с его функцией, тогда я понял, что некоторые из этих функций не были связаны с этим классом, но были только математическими функциями, поэтому я решил переместить их в пространство имен.
Мой первый вопрос: что такое расширение файла для пространства имен C++?
У меня есть файл constants.h, где я планирую сохранять глобальные константы, например PI.
Сейчас:
#include <math.h>
const double PI = M_PI;
У меня есть пространство имен я говорил раньше, теперь называется: specificMath.h
#include <stdlib.h>
#include "constants.h"
... more code
У меня есть gaussian.cpp:
#include "gaussian.h"
#include "specificMath.h"
#include <iostream>
... more code
Этот файл содержит основную функцию, которая прямо сейчас ничего не делает, я просто не могу собрать весь проект без main ...
У меня есть gaussian.h, где я не включаю ничего, это неправильно?
Третий класс, который не имеет атрибутов, просто методов (опять же, это неправильно? Или не очень?). truncatedFunctions.cpp
#include "specificMath.h"
#include <stdlib.h>
#include "truncatedFunctions.h"
#include "gaussian.h"
using namespace specificMath;
И его truncatedFunctions.h где, опять же, я не включая ничего.
И четвертый класс, где я включаю
#include "margin.h" //Its header, where I'm not including anything
#include "gaussian.h"
#include "specificMath.h"
using namespace specificMath;
Когда я «сделать» это, кажется, собрать хорошо, но когда дело доходит до связующей части я получаю много ошибок говорить, что вещи на моем Класс margin.cpp был сначала определен в truncatedFunctions.cpp
Я сошел с ума. Я понятия не имею, почему это происходит, или как его решить. Я был бы очень признателен, если бы кто-нибудь мог мне помочь, и, пожалуйста, любой лишний совет будет замечательным, так как я действительно стараюсь как можно больше узнать об этом проекте. Благодаря!
Нет ничего плохого в объявлениях const Constator в файлах заголовков в C++; для этого нет необходимости использовать неуклюжий «extern». Фактически, использование 'extern' может заставить компилятор пропустить оптимизацию, иначе он мог бы знать фактическое значение данных. –
@GregHewgill Я этого не знал, спасибо. Я редактировал, возможно, у него есть неконстантные переменные где-то в заголовках. –
С заголовком вы подразумеваете, что включает, не так ли? – coconut