在StackOverflow上已经有了一些关于这个问题的答案,但是没有一个对我有效。
我有一个文件.h
,其中声明了一些常量:
#ifndef CONVENZIONI_GERARCHIA_H
#define CONVENZIONI_GERARCHIA_H
namespace Conv{
enum Linguaggio : short;
enum Libreria : short;
...
}
#endif
然后是定义它们的.cpp
文件:
#include "models/support/Convenzioni.h"
namespace Conv{
enum Libreria : short{
BOOTSTRAP = 0,
JQUERY = 1,
TREEJS = 2,
ANGULAR = 3,
VUEJS = 4
};
enum Linguaggio :short {
PYTHON = 0,
JAVA = 1,
PHP = 2,
CPP = 3,
SWIFT = 4,
JAVASCRIPT = 5,
RUBY = 6,
SQL =7,
TYPESCRIPT =8
};
const double coeff_liquidazione{0.889};
const double perc_remunerazione{0.8};
const unsigned int soglia_anni_esperto{20};
...
}
但是,当我尝试使用这些枚举时,我得到错误:“Python”不是“conv::Linguaggio”
的成员,还得到错误:嵌套名称说明符中命名的不完整类型“conv::Linguaggio”
我在这个文件中使用它:
#ifndef CONTROLLER_H
#define CONTROLLER_H
#include "models/support/Convenzioni.h"
#include ...
class Controller : public QObject
{
Q_OBJECT
Gestionale* view;
std::vector<Employee*> getEmployee() const{
auto _ = Conv::Linguaggio::PYTHON;
// ^^^^^^^^^^^^^^^^^^^^^^^^-------- error here
return {};
}
public:
...
signals:
};
#endif // CONTROLLER_H
…我错过了什么? 在.cpp
上定义的所有其他常量都可以正常工作
更新:
如果我将枚举粘贴到.h
中,它们可以正常工作
我错过了什么? 在。cpp上定义的所有其他常量都可以正常工作
变量不同于类型。 如果只有变量的声明对某个.cpp
文件可见,那么链接器将在链接程序时找到适当的定义。 (假设你没有违反ODR)。
但是enum
是一种类型,类型的定义必须对需要定义的每个翻译单元都是可见的。 您基本上必须在头文件中定义枚举
。