Мой вопрос касается трех файлов и их взаимосвязи: В одном файле у меня есть несколько предопределенных типов, таких как Uint, int32и т. Д. В двух других у меня есть класс, который используется для категорий исключений (которые в основном представляют собой статические функции) и определений для класса.

Все типы находятся в файле Types.hс макросом, который позволяет определять типы глобально:

namespace Enigma {
    //Omitted Types
    typedef std::uint32_t Uint32;
    typedef std::string   string;
    //Omitted Types
}
#if defined(USING_GLOBAL_TYPES)
using namespace aNamespace;
#endif

В других файлах у меня есть (или все равно что-то похожее):

Заголовочный файл:

#include "Types.h"

namespace Enigma {
class ExceptionCategory {
    typedef Uint32 CategoryID;

    static CategoryID GetIDFromName(const string& name) noexcept;
};
}

Source file:

Engima::ExceptionCategory::CategoryID Enigma::ExceptionCategory::GetIDFromName(const string& name) noexcept {
//Omitted Code
}

Теперь проблема заключается в исходном файле в соответствии с сообщениями об ошибках, которые компилятор выдает мне, которые включают следующее:

ошибка C4430: отсутствует спецификатор типа - предполагается int. Примечание: C ++ не поддерживает default-int

ошибка C2143: синтаксическая ошибка: отсутствует ',' перед 'и'

ошибка C2511: 'Enigma :: ExceptionCategory :: IDType Enigma :: ExceptionCategory :: GetIDFromName (const int) noexcept': перегруженная функция-член не найдена в 'Enigma :: ExceptionCategory'

Редактировать: Основная переработка

TheKingOfAtlantis

Ответов: 2

Ответы (2)

Довольно простая ошибка:
В исходном коде отсутствовало пространство имен Enigma перед строкой.
Это необычно, потому что он работал нормально целую вечность, пока вдруг не перестал работать

Engima::ExceptionCategory::CategoryID Enigma::ExceptionCategory::GetIDFromName(const Enigma::string& name) noexcept {
    //Omitted Code
}

В файле cpp удалите двойное двоеточие перед пространством имен.

aNamespace::int32 aNamespace::aClass::aStaticFunction() noexcept {
    //does a thing
}

2022 WebDevInsider