C++ 继承异常类 runtime_error 时出现错误 [Error] overriding 'virtual std::runtime_error::~runtime_error() throw...

本文探讨了在GCC编译器下,由于异常规范不一致导致的编译错误问题。具体分析了当子类DivisionException继承自runtime_error时,因析构函数异常规范缺失而引发的错误,并给出了相应的解决方案。

创建一个类 DivisionException ,继承自 runtime_error 。

类的定义如下:

class DivisionException : public std::runtime_error
{
private:
	MyComplex Divident_;
	MyComplex Divisor_;
public:
	DivisionException(std::string &str, MyComplex &d1, MyComplex &d2)
		:std::runtime_error(str)
	{
		Divident_ = d1;
		Divisor_ = d2;
	}

	MyComplex &getDivident()
	{
		return Divident_;
	}

	MyComplex &getDivisor()
	{
		return Divisor_;
	}
};

 

这段代码在 GCC 编译器下会报出 [Error] overriding 'virtual std::runtime_error::~runtime_error() throw ()'

的错误。

这个错误令人感到莫名其妙,查阅资料后发现,出现这个错误原因在于 父类的析构函数 ~runtime_error() 中有“异常规范”throw(),这个异常规范限制了父类的析构函数不能抛出任何异常。毕竟没人愿意析构函数抛出异常,如果析构函数抛出异常,那么析构函数中的某些代码将不会得到执行,造成不可预料的后果。

而我们定义的子类中的析构函数并没限制其不能抛出异常,这导致编译器报错,在函数定义中添加下面析构函数的代码后,顺利编译通过。

~DivisionException()
throw()
{
		
} 
 
需要注意的是,这个问题在 VS2015 下并不会报错,错误出现在 GCC 4.8.1 的编译环境下。

转载于:https://www.cnblogs.com/chenjiafeng/p/5444757.html

In file included from D:/qt/Tools/mingw492_32/i686-w64-mingw32/include/c++/unordered_map:35:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:29, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/qt/Tools/mingw492_32/i686-w64-mingw32/include/c++/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options. #error This file requires compiler and library support for the \ ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:27:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:45:1: warning: identifier 'constexpr' is a keyword in C++11 [-Wc++0x-compat] constexpr Number abs(Number val) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:85:5: warning: identifier 'static_assert' is a keyword in C++11 [-Wc++0x-compat] static_assert(std::is_floating_point<LNumber>::value || std::is_floating_point<RNumber>::value, ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:169:9: warning: identifier 'nullptr' is a keyword in C++11 [-Wc++0x-compat] assert(len_converted != nullptr); ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:76:5: warning: identifier 'noexcept' is a keyword in C++11 [-Wc++0x-compat] optional() noexcept ^ In file included from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:30:0: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell_reference.hpp:267:9: warning: identifier 'decltype' is a keyword in C++11 [-Wc++0x-compat] static_assert(std::is_same<decltype(x.row()), std::uint32_t>::value, "this hash function expects both row and column to be 32-bit numbers"); ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:32:0, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell_type.hpp:38:1: warning: scoped enums only available with -std=c++11 or -std=gnu++11 enum class XLNT_API cell_type ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:33:0, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:40:7: error: expected nested-name-specifier before 'row_t' using row_t = std::uint32_t; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:53:11: error: expected nested-name-specifier before 'index_t' using index_t = std::uint32_t; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:63:12: error: 'index_t' does not name a type static index_t column_index_from_string(const std::string &column_string); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:73:49: error: 'index_t' has not been declared static std::string column_string_from_index(index_t column_index); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:83:22: error: expected ')' before 'column_index' column_t(index_t column_index); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:128:21: error: 'index_t' has not been declared bool operator==(index_t other) const; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:128:10: error: 'bool xlnt::column_t::operator==(int) const' cannot be overloaded bool operator==(index_t other) const; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:123:10: error: with 'bool xlnt::column_t::operator==(int) const' bool operator==(int other) const; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:148:21: error: 'index_t' has not been declared bool operator!=(index_t other) const; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:148:10: error: 'bool xlnt::column_t::operator!=(int) const' cannot be overloaded bool operator!=(index_t other) const; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:143:10: error: with 'bool xlnt::column_t::operator!=(int) const' bool operator!=(int other) const; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:183:36: error: 'index_t' in 'class xlnt::column_t' does not name a type bool operator>(const column_t::index_t &other) const; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:188:37: error: 'index_t' in 'class xlnt::column_t' does not name a type bool operator>=(const column_t::index_t &other) const; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:193:36: error: 'index_t' in 'class xlnt::column_t' does not name a type bool operator<(const column_t::index_t &other) const; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:198:37: error: 'index_t' in 'class xlnt::column_t' does not name a type bool operator<=(const column_t::index_t &other) const; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:243:52: error: 'index_t' in 'class xlnt::column_t' does not name a type friend XLNT_API bool operator>(const column_t::index_t &left, const column_t &right); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:248:53: error: 'index_t' in 'class xlnt::column_t' does not name a type friend XLNT_API bool operator>=(const column_t::index_t &left, const column_t &right); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:253:52: error: 'index_t' in 'class xlnt::column_t' does not name a type friend XLNT_API bool operator<(const column_t::index_t &left, const column_t &right); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:258:53: error: 'index_t' in 'class xlnt::column_t' does not name a type friend XLNT_API bool operator<=(const column_t::index_t &left, const column_t &right); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:268:5: error: 'index_t' does not name a type index_t index; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:271:1: warning: scoped enums only available with -std=c++11 or -std=gnu++11 enum class row_or_col_t : int ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:271:27: warning: scoped enums only available with -std=c++11 or -std=gnu++11 enum class row_or_col_t : int ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:297:8: error: 'hash' is not a class template struct hash<xlnt::column_t> ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/index_types.hpp:298:1: error: explicit specialization of non-template 'std::hash' { ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:30:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/phonetic_run.hpp:38:5: error: 'uint32_t' does not name a type uint32_t start; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/phonetic_run.hpp:39:5: error: 'uint32_t' does not name a type uint32_t end; ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:26:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:50:36: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 exception(const exception &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:55:16: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~exception() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:55:5: error: looser throw specifier for 'virtual xlnt::exception::~exception()' ~exception() override; ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:28:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:26, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/qt/Tools/mingw492_32/i686-w64-mingw32/include/c++/stdexcept:121:13: error: overriding 'virtual std::runtime_error::~runtime_error() throw ()' virtual ~runtime_error() _GLIBCXX_USE_NOEXCEPT; ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:26:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:89:52: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 invalid_parameter(const invalid_parameter &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:94:24: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~invalid_parameter() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:111:56: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 invalid_sheet_title(const invalid_sheet_title &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:116:26: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~invalid_sheet_title() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:134:42: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 invalid_file(const invalid_file &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:139:19: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~invalid_file() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:157:52: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 illegal_character(const illegal_character &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:162:24: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~illegal_character() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:179:52: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 invalid_data_type(const invalid_data_type &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:184:24: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~invalid_data_type() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:201:58: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 invalid_column_index(const invalid_column_index &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:206:27: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~invalid_column_index() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:218:45: error: 'row_t' has not been declared invalid_cell_reference(column_t column, row_t row); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:228:62: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 invalid_cell_reference(const invalid_cell_reference &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:233:29: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~invalid_cell_reference() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:250:52: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 invalid_attribute(const invalid_attribute &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:255:24: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~invalid_attribute() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:272:44: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 key_not_found(const key_not_found &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:277:20: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~key_not_found() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:294:60: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 no_visible_worksheets(const no_visible_worksheets &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:299:28: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~no_visible_worksheets() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:316:60: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 unhandled_switch_case(const unhandled_switch_case &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:321:28: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~unhandled_switch_case() override; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:339:40: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11 unsupported(const unsupported &) = default; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/exceptions.hpp:344:18: warning: override controls (override/final) only available with -std=c++11 or -std=gnu++11 ~unsupported() override; ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:27:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:45:1: error: 'constexpr' does not name a type constexpr Number abs(Number val) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:45:1: note: C++11 'constexpr' only available with -std=c++11 or -std=gnu++11 D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:54:1: error: 'constexpr' does not name a type constexpr typename std::common_type<NumberL, NumberR>::type (max)(NumberL lval, NumberR rval) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:54:1: note: C++11 'constexpr' only available with -std=c++11 or -std=gnu++11 D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:63:1: error: 'constexpr' does not name a type constexpr typename std::common_type<NumberL, NumberR>::type (min)(NumberL lval, NumberR rval) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:63:1: note: C++11 'constexpr' only available with -std=c++11 or -std=gnu++11 D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:80:27: error: no default argument for 'LNumber' int epsilon_scale = 20) // scale the "fuzzy" equality. Higher value gives a more tolerant comparison ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:80:27: error: no default argument for 'RNumber' D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:80:27: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11 D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp: In function 'bool xlnt::detail::float_equals(const LNumber&, const RNumber&, int)': D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:83:11: error: expected nested-name-specifier before 'common_t' using common_t = typename std::common_type<LNumber, RNumber>::type; ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:85:19: error: 'is_floating_point' is not a member of 'std' static_assert(std::is_floating_point<LNumber>::value || std::is_floating_point<RNumber>::value, ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:85:49: error: expected primary-expression before '>' token static_assert(std::is_floating_point<LNumber>::value || std::is_floating_point<RNumber>::value, ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:85:50: error: '::value' has not been declared static_assert(std::is_floating_point<LNumber>::value || std::is_floating_point<RNumber>::value, ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:85:61: error: 'is_floating_point' is not a member of 'std' static_assert(std::is_floating_point<LNumber>::value || std::is_floating_point<RNumber>::value, ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:85:91: error: expected primary-expression before '>' token static_assert(std::is_floating_point<LNumber>::value || std::is_floating_point<RNumber>::value, ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:85:92: error: '::value' has not been declared static_assert(std::is_floating_point<LNumber>::value || std::is_floating_point<RNumber>::value, ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:86:77: error: there are no arguments to 'static_assert' that depend on a template parameter, so a declaration of 'static_assert' must be available [-fpermissive] "Using this function with two integers is just wasting time. Use =="); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:86:77: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated) D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:87:76: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 static_assert(std::numeric_limits<EpsilonType>::epsilon() < EpsilonType{1}, ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:98:5: error: 'constexpr' was not declared in this scope constexpr common_t epsilon = static_cast<common_t>(std::numeric_limits<EpsilonType>::epsilon()); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:103:5: error: 'common_t' was not declared in this scope common_t scaled_fuzz = epsilon_scale * epsilon * max(max(xlnt::detail::abs<common_t>(lhs), ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:105:43: error: expected primary-expression before ')' token common_t{1}); // clamp ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:106:20: error: 'scaled_fuzz' was not declared in this scope return ((lhs + scaled_fuzz) >= rhs) && ((rhs + scaled_fuzz) >= lhs); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp: At global scope: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:111:12: error: 'constexpr' does not name a type static constexpr int Excel_Digit_Precision = 15; //sf ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:111:12: note: C++11 'constexpr' only available with -std=c++11 or -std=gnu++11 In file included from D:/qt/Tools/mingw492_32/i686-w64-mingw32/include/c++/cassert:43:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:28, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:27, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp: In member function 'double xlnt::detail::number_serialiser::deserialise(const string&, ptrdiff_t*) const': D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:169:33: error: 'nullptr' was not declared in this scope assert(len_converted != nullptr); ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:27:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:179:9: warning: 'auto' changes meaning in C++11; please remove it [-Wc++0x-compat] auto copy_end = std::copy(s.begin(), s.end(), buf); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:179:14: error: 'copy_end' does not name a type auto copy_end = std::copy(s.begin(), s.end(), buf); ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/numeric.hpp:180:54: error: 'copy_end' was not declared in this scope convert_pt_to_comma(buf, static_cast<size_t>(copy_end - buf)); ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp: At global scope: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:57:45: error: 'enable_if' in namespace 'std' does not name a template type template <typename U = T, typename std::enable_if<!std::is_floating_point<U>::value>::type * = nullptr> ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:57:54: error: expected '>' before '<' token template <typename U = T, typename std::enable_if<!std::is_floating_point<U>::value>::type * = nullptr> ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:58:5: error: 'constexpr' does not name a type constexpr bool compare_equal(const U &lhs, const U &rhs) const ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:58:5: note: C++11 'constexpr' only available with -std=c++11 or -std=gnu++11 D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:66:45: error: 'enable_if' in namespace 'std' does not name a template type template <typename U = T, typename std::enable_if<std::is_floating_point<U>::value>::type * = nullptr> ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:66:54: error: expected '>' before '<' token template <typename U = T, typename std::enable_if<std::is_floating_point<U>::value>::type * = nullptr> ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:67:5: error: 'constexpr' does not name a type constexpr bool compare_equal(const U &lhs, const U &rhs) const ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:67:5: note: C++11 'constexpr' only available with -std=c++11 or -std=gnu++11 D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:76:14: error: expected ';' at end of member declaration optional() noexcept ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:76:16: error: 'noexcept' does not name a type optional() noexcept ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:85:28: error: expected ';' at end of member declaration optional(const T &value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_copy_T_noexcept{})) ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:41: error: expected identifier before '(' token #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:85:39: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(const T &value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_copy_T_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:42: error: expected ')' before 'false' #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:85:39: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(const T &value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_copy_T_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:42: error: expected ')' before 'false' #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:85:39: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(const T &value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_copy_T_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:41: error: expected ';' at end of member declaration #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:85:39: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(const T &value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_copy_T_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:42: error: expected unqualified-id before 'false' #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:85:39: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(const T &value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_copy_T_noexcept{})) ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:95:16: error: expected ',' or '...' before '&&' token optional(T &&value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_move_T_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:95:23: error: expected ';' at end of member declaration optional(T &&value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_move_T_noexcept{})) ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:41: error: expected identifier before '(' token #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:95:34: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(T &&value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_move_T_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:42: error: expected ')' before 'false' #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:95:34: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(T &&value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_move_T_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:42: error: expected ')' before 'false' #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:95:34: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(T &&value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_move_T_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:41: error: expected ';' at end of member declaration #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:95:34: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(T &&value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_move_T_noexcept{})) ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:95:25: error: 'int xlnt::optional<T>::noexcept(...)' cannot be overloaded optional(T &&value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_move_T_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:85:30: error: with 'int xlnt::optional<T>::noexcept(...)' optional(const T &value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_copy_T_noexcept{})) ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:42: error: expected unqualified-id before 'false' #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:95:34: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(T &&value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_move_T_noexcept{})) ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:105:35: error: expected ';' at end of member declaration optional(const optional &other) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(copy_ctor_noexcept{})) ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:41: error: expected identifier before '(' token #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:105:46: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(const optional &other) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(copy_ctor_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:42: error: expected ')' before 'false' #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:105:46: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(const optional &other) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(copy_ctor_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:42: error: expected ')' before 'false' #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:105:46: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(const optional &other) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(copy_ctor_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:41: error: expected ';' at end of member declaration #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:105:46: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(const optional &other) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(copy_ctor_noexcept{})) ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:105:37: error: 'int xlnt::optional<T>::noexcept(...)' cannot be overloaded optional(const optional &other) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(copy_ctor_noexcept{})) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:85:30: error: with 'int xlnt::optional<T>::noexcept(...)' optional(const T &value) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(ctor_copy_T_noexcept{})) ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:43:42: error: expected unqualified-id before 'false' #define XLNT_NOEXCEPT_VALUE_COMPAT(...) (false) ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:105:46: note: in expansion of macro 'XLNT_NOEXCEPT_VALUE_COMPAT' optional(const optional &other) noexcept(XLNT_NOEXCEPT_VALUE_COMPAT(copy_ctor_noexcept{})) ^ In file included from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/color.hpp:31:0, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/styles/font.hpp:30, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text_run.hpp:29, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/rich_text.hpp:31, from D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/cell/cell.hpp:34, from D:\luoyu\xlnt-master测试有效\xlnt-master\xlnt-master\source\cell\cell.cpp:29: D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:186:28: error: expected '}' before end of line #pragma GCC diagnostic push ^ D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:186:28: error: expected unqualified-id before end of line D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:186:28: error: expected '}' before end of line D:/luoyu/xlnt-master测试有效/xlnt-master/xlnt-master/source/../include/xlnt/utils/optional.hpp:186:28: error: expected declaration before end of line CMakeFiles\xlnt.dir\build.make:54: recipe for target 'CMakeFiles/xlnt.dir/cell/cell.cpp.obj' failed mingw32-make[2]: *** [CMakeFiles/xlnt.dir/cell/cell.cpp.obj] Error 1 CMakeFiles\Makefile2:90: recipe for target 'CMakeFiles/xlnt.dir/all' failed mingw32-make[1]: *** [CMakeFiles/xlnt.dir/all] Error 2 makefile:116: recipe for target 'all' failed mingw32-make: *** [all] Error 2
最新发布
08-02
<think>首先,用户的问题是关于一个编译警告:"warning: overriding recipe for target 'moc_frminputnew.cpp'"。这看起来是C++项目编译出现的,可能与Qt框架相关,因为"moc"是Qt的元对象编译器(Meta-Object Compiler)生成的。 回顾系统指令: - 所有行内数学表达式用$...$格式。 - 独立公式用$$...$$格式。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用,但用户提供的引用是关于其他编译警告的,我需要基于这些推断。 用户提供的引用: - [^1]: 警告:overriding commands for target `temp/moc/moc_frmcalibrationtool.cpp'。这类似于用户的问题。 - [^2]: 警告:overriding recipe for target ‘debug/qaesencryption.o'。 - [^3]: UOS环境下qmake报错:警告:覆盖关于目标的配方(overriding recipe for targets)。错误原因:.pro文件中重复载入了某文件.h或者.cpp。解决:删除其中一个,不要重复载入。 这些引用表明,这种警告通常是由于Makefile中目标文件的配方被多次定义导致的。常见原因是.pro文件(Qt项目文件)中重复包含了源文件或头文件。 用户的问题具体是:"error: warning: overriding recipe for target 'moc_frminputnew.cpp'"。所以,我需要解释这个警告的含义,并提供解决方法。 逐步解决: 1. **解释警告含义**:这个警告意味着在Makefile中,针对目标'moc_frminputnew.cpp'的配方(recipe)被多次定义。Qt的moc工具在编译会生成元对象代码,如果同一个文件被多次指定,就会导致冲突。 2. **原因分析**:基于引用[^3],错误原因通常是.pro文件中重复载入了某个.h或.cpp文件。例如,如果'frminputnew.h'被多次添加到HEADERS或SOURCES部分,moc就会尝试多次生成'moc_frminputnew.cpp',导致Makefile中出现重复规则。 3. **解决方法**: - 检查.pro文件:确保没有重复包含同一个头文件或源文件。 - 删除多余的条目:只保留一次引用。 - 清理并重新编译:删除build目录或运行'make clean',然后重新运行qmake和make。 现在,构建回答结构: - 引言:确认问题并简要解释。 - 步骤1:解释警告的含义。 - 步骤2:分析可能的原因。 - 步骤3:提供解决步骤。 - 结论:总结并确保问题解决。 - 生成相关问题:在最后添加相关问题。 使用中文回答。 添加引用:在回答中引用相关部分末尾添加[^n]。用户提供了[^1],[^2],[^3],所以我需要合理引用。 例如: - 当提到类似警告,引用[^1]。 - 当解释原因,引用[^3]。 生成相关问题: - 基于主题,生成2-3个相关问题。 最终回答结构: 1. 问题描述 2. 警告含义 3. 原因分析 4. 解决步骤 5. 相关问题</think>### 编译警告:overriding recipe for target 'moc_frminputnew.cpp' 的分析与解决 您在编译C++项目遇到的警告 `warning: overriding recipe for target 'moc_frminputnew.cpp'` 是Qt框架编译过程中的常见问题,通常与项目文件(`.pro`)的配置错误相关。下面我将逐步解释该警告的含义、原因,并提供详细的解决方法,确保您能高效修复问题。本文基于Qt编译机制和常见实践,参考了类似案例[^3]。 #### 1. **警告含义** - 这个警告表示在生成的Makefile中,针对目标文件 `moc_frminputnew.cpp` 的编译规则(recipe)被重复定义了多次。在编译过程中,Qt的元对象编译器(moc)会自动为标记了 `Q_OBJECT` 宏的头文件生成对应的 `moc_*.cpp` 文件(如 `moc_frminputnew.cpp`)。如果同一个头文件被多次引用,Makefile会尝试覆盖已有规则,导致冲突[^1][^3]。 - 数学表达示例:在编译器规则中,重复定义可能导致冲突概率 $P(\text{冲突}) \propto n^2$,其中 $n$ 是重复次数。 #### 2. **根本原因** 根据引用案例和Qt机制,主要原因通常是 **项目文件(`.pro`)中重复包含了同一个头文件或源文件**: - **头文件重复包含**:如果 `frminputnew.h`(或类似文件)在 `.pro` 文件的 `HEADERS` 部分被多次列出,moc会尝试多次生成 `moc_frminputnew.cpp`。 - **源文件间接引用**:某些 `.cpp` 文件可能通过 `include` 指令间接引用了 `frminputnew.h`,同在 `.pro` 的 `SOURCES` 中也被显式添加,造成双重处理。 - **其他可能原因**: - 项目文件结构混乱,例如子目录中的文件被重复包含。 - 清理不彻底:旧的Makefile残留导致新编译规则冲突[^2][^3]。 #### 3. **解决步骤** 以下是具体解决方法,按顺序操作可彻底消除警告。假设您的项目文件名为 `your_project.pro`: **步骤1: 检查并修复 `.pro` 文件** - 打开项目文件(如 `your_project.pro`),查找 `HEADERS` 和 `SOURCES` 部分。 - 移除重复条目:确保 `frminputnew.h` 或其他相关文件只被包含一次。例如: ```makefile # 错误示例:frminputnew.h 被重复添加 HEADERS += src/frminputnew.h \ src/frminputnew.h # 删除此行 # 正确示例:每个文件只出现一次 HEADERS += src/frminputnew.h ``` - 检查间接引用:如果 `frminputnew.h` 已通过其他头文件包含(如 `#include "frminputnew.h"`),则在 `.pro` 中无需显式添加。 **步骤2: 清理构建目录** - 删除整个 `build` 目录(或运行清理命令): ```bash make clean # 清理编译输出 qmake your_project.pro # 重新生成Makefile make # 重新编译 ``` - 如果使用IDE(如Qt Creator),点击 **Build > Clean All** 后再重新编译。 **步骤3: 验证解决** - 重新编译后,警告应消失。如果问题仍存在: - 检查子项目:如果项目包含多个 `.pro` 文件(如子模块),确保无交叉重复。 - 查看完整日志:运行 `make --debug` 输出详细日志,定位具体冲突位置。 #### 4. **预防措施** - **规范项目结构**:将头文件统一放入 `include` 目录,源文件放入 `src` 目录,避免路径混乱。 - **使用条件编译**:在头文件中添加 `#pragma once` 或 `#ifndef` 宏,防止多重包含,但这对moc生成的规则无效。 - **定期清理**:在修改 `.pro` 文件后,始终先清理再编译。 #### 总结 该警告源于项目文件的配置错误,通过移除重复包含项并清理构建目录即可解决[^3]。Qt的moc机制在高效处理信号槽依赖精确的文件引用,一旦修复,编译将顺利进行。如果问题持续,请提供您的 `.pro` 文件片段以进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值