C++ C++;架构x86_64的重复符号..递增枚举类型
我正在尝试递增枚举类型,因此通过以下方式重载运算符+:C++ C++;架构x86_64的重复符号..递增枚举类型,c++,enums,C++,Enums,我正在尝试递增枚举类型,因此通过以下方式重载运算符+: enum QuarterType{ FIRST_QUARTER, SECOND_QUARTER, THIRD_QUARTER, FOURTH_QUARTER }; 重载运算符++: QuarterType& operator++(QuarterType& quarter){ switch (quarte
enum QuarterType{
FIRST_QUARTER,
SECOND_QUARTER,
THIRD_QUARTER,
FOURTH_QUARTER
};
重载运算符++:
QuarterType& operator++(QuarterType& quarter){
switch (quarter) {
case FIRST_QUARTER:
return quarter= SECOND_QUARTER;
case SECOND_QUARTER:
return quarter=THIRD_QUARTER;
case THIRD_QUARTER:
return quarter=FOURTH_QUARTER;
case FOURTH_QUARTER:
return quarter=FIRST_QUARTER;
}
}
但是当我编译项目时,我得到了一个错误:
duplicate symbol __ZN3mtmppERNS_11QuarterTypeE in:
/Users/../Library/Developer/Xcode/DerivedData/mtm-crtygivbbxwmodgeasndvnjnpczt/Build/Intermediates/mtm.build/Debug/mtm.build/Objects-normal/x86_64/SecurityExample.o
/Users/../Library/Developer/Xcode/DerivedData/mtm-crtygivbbxwmodgeasndvnjnpczt/Build/Intermediates/mtm.build/Debug/mtm.build/Objects-normal/x86_64/Quarters.o
duplicate symbol __ZN3mtmppERNS_11QuarterTypeE in:
/Users/../Library/Developer/Xcode/DerivedData/mtm-crtygivbbxwmodgeasndvnjnpczt/Build/Intermediates/mtm.build/Debug/mtm.build/Objects-normal/x86_64/SecurityExample.o
/Users/../Library/Developer/Xcode/DerivedData/mtm-crtygivbbxwmodgeasndvnjnpczt/Build/Intermediates/mtm.build/Debug/mtm.build/Objects-normal/x86_64/Security.o
ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我怎样才能解决这个问题?增加枚举类型的正确方法或更好的方法是什么 您的运算符++似乎是从多个编译单元导出的。这可能会导致重复的符号错误,其原因可能是头文件中运算符++的定义(而不仅仅是声明)。以下选项可用于解决此问题:
inline
enum类类型:int{
第一季度=0,
第二季度=1,
第三季度=2,
第四季度=3,
总宿舍=4
};
内联四分之一类型和运算符++(四分之一类型和四分之一){
int currentQuarter=静态_cast(季度);
int nextQuarter=(当前季度+1)
%静态铸型(四分之一型:总四分之一);
季度=静态(下一季度);
返回季度;
}
您的运算符++似乎是从多个编译单元导出的。这可能会导致重复的符号错误,其原因可能是头文件中运算符++的定义(而不仅仅是声明)。以下选项可用于解决此问题:
inline
enum类类型:int{
第一季度=0,
第二季度=1,
第三季度=2,
第四季度=3,
总宿舍=4
};
内联四分之一类型和运算符++(四分之一类型和四分之一){
int currentQuarter=静态_cast(季度);
int nextQuarter=(当前季度+1)
%静态铸型(四分之一型:总四分之一);
季度=静态(下一季度);
返回季度;
}
。我猜你忘了保护头球什么的。请发布。如果将运算符++声明为内联,错误是否仍然存在?另外,为了实现,您可以使用枚举类和模运算。@SergeRogatch将运算符声明为内联解决了这个问题,但我不明白!你能解释一下吗?谢谢:)@Raw305,我已经添加了一个答案。。我猜你忘了保护头球什么的。请发布。如果将运算符++声明为内联,错误是否仍然存在?另外,为了实现,您可以使用枚举类和模运算。@SergeRogatch将运算符声明为内联解决了这个问题,但我不明白!你能解释一下吗?谢谢:)@Raw305,我已经添加了一个答案。我尝试使用你建议的方式,我遇到了一个“constness”问题和一个警告,上面写着“返回对本地临时对象的引用”。。你可能想看看我是怎么解决的,(我贴了一个答案)@Raw305,的确,我犯了一个错误。我已经更新了我的答案。你是对的,它没有正常工作(我修复它的方式)。。但是你的。。实际上我是一个初学者,所以我一直缺少一些简单的细节:(非常感谢:)我尝试使用你建议的方式,我遇到了一个“constness”问题和一个警告,说“返回对本地临时对象的引用”。。你可能想看看我是怎么解决的,(我贴了一个答案)@Raw305,的确,我犯了一个错误。我已经更新了我的答案。你是对的,它没有正常工作(我修复它的方式)。。但是你的。。实际上我是一个初学者,所以我一直缺少一些简单的细节:(非常感谢:)
enum class QuarterType : int {
FIRST_QUARTER = 0,
SECOND_QUARTER = 1,
THIRD_QUARTER = 2,
FOURTH_QUARTER = 3,
TOTAL_QUARTERS = 4
};
inline QuarterType& operator++(QuarterType& quarter) {
int currentQuarter = static_cast<int>(quarter);
int nextQuarter = (currentQuarter+1)
% static_cast<int>(QuarterType::TOTAL_QUARTERS);
quarter = static_cast<QuarterType>(nextQuarter);
return quarter;
}