我的问题涉及三个文件以及它们之间的关系:
在一个文件中,我有一堆预定义类型,例如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;
};
}
源文件:
Engima::ExceptionCategory::CategoryID Enigma::ExceptionCategory::GetIDFromName(const string& name) noexcept {
//Omitted Code
}
现在根据编译器向我投掷的错误消息,问题在于Source文件,其中包括以下内容:
错误C4430:缺少类型说明符 - 假设为int。注意:C ++不支持default-int
错误C2143:语法错误:缺少','之前'&'
错误C2511:' Enigma :: ExceptionCategory :: IDType Enigma :: ExceptionCategory :: GetIDFromName(const int)noexcept':在'Enigma :: ExceptionCategory'中未找到重载的成员函数
编辑:主要重写
答案 0 :(得分:1)
在cpp文件中,删除命名空间前的双冒号。
aNamespace::int32 aNamespace::aClass::aStaticFunction() noexcept {
//does a thing
}
答案 1 :(得分:0)
相当简单的错误:
在源代码中Enigma
之前缺少名称空间string
这是不寻常的,因为它已经很好地工作了很长时间,直到它突然停止工作
Engima::ExceptionCategory::CategoryID Enigma::ExceptionCategory::GetIDFromName(const Enigma::string& name) noexcept {
//Omitted Code
}