Closed programClown closed 10 months ago
感谢,不是大问题,我之后加个条件编译。
两个问题,都改好了,麻烦您有时间再试试,看看能否过编译。
好的,我试完告诉您
我测试过了,库没问题,example有问题,主要是winbar_p.h和winbar.h交叉引用的问题,msvc的编译顺序不能明确他俩谁先谁后,就会造成互相都找不到对方的定义,这个好像gcc不会有,可能跟编译优化有关,不过建议尽量不要交叉引用头文件,放到cpp里这个问题就会迎刃而解。
不过qt5.15的example又没有问题,严重怀疑是不是qt5.12的编译指令做了啥操作
我测试过了,库没问题,example有问题,主要是winbar_p.h和winbar.h交叉引用的问题,msvc的编译顺序不能明确他俩谁先谁后,就会造成互相都找不到对方的定义,这个好像gcc不会有,可能跟编译优化有关,不过建议尽量不要交叉引用头文件,放到cpp里这个问题就会迎刃而解。
windowbar.h没有引用windowbar_p.h,用的是前置声明。有没有具体的报错信息?
[build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,20): error C2039: "unique_ptr": 不是 "std" 的成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“../../../../examples/shared/widgetframe/windowbar.cpp”) [build] D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\functional(31,1): [build] 参见“std”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,30): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“../../../../examples/shared/widgetframe/windowbar.cpp”) [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,30): error C2143: 语法错误: 缺少“;”(在“<”的前面) [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“../../../../examples/shared/widgetframe/windowbar.cpp”) [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,54): error C2238: 意外的标记位于“;”之前 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“../../../../examples/shared/widgetframe/windowbar.cpp”) [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.cpp(220,16): error C2039: "w": 不是 "QObjectData" 的成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] D:\Qt\Qt5.12.10\5.12.10\msvc2017_64\include\QtCore\qobject.h(95,21): [build] 参见“QObjectData”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.cpp(255,32): error C2039: "autoIcon": 不是 "QObjectData" 的成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] D:\Qt\Qt5.12.10\5.12.10\msvc2017_64\include\QtCore\qobject.h(95,21): [build] 参见“QObjectData”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.cpp(262,32): error C2039: "autoTitle": 不是 "QObjectData" 的成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] D:\Qt\Qt5.12.10\5.12.10\msvc2017_64\include\QtCore\qobject.h(95,21): [build] 参见“QObjectData”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.cpp(288,37): error C2789: “QWK::WindowBar::unique_ptr”: 必须初始化常量限定类型的对象 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,20): [build] 参见“QWK::WindowBar::unique_ptr”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.cpp(288,27): error C2614: “QWK::WindowBar”: 非法的成员初始化:“d_ptr”不是基或成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] windowitemdelegate.cpp [build] mocs_compilation_Release.cpp [build] nativeeventfilter.cpp [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,20): error C2039: "unique_ptr": 不是 "std" 的成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“WidgetFrame_autogen/mocs_compilation_Release.cpp”) [build] D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\functional(31,1): [build] 参见“std”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,30): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“WidgetFrame_autogen/mocs_compilation_Release.cpp”) [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,30): error C2143: 语法错误: 缺少“;”(在“<”的前面) [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“WidgetFrame_autogen/mocs_compilation_Release.cpp”) [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,54): error C2238: 意外的标记位于“;”之前 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“WidgetFrame_autogen/mocs_compilation_Release.cpp”)
[build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,20): error C2039: "unique_ptr": 不是 "std" 的成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“../../../../examples/shared/widgetframe/windowbar.cpp”) [build] D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\functional(31,1): [build] 参见“std”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,30): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“../../../../examples/shared/widgetframe/windowbar.cpp”) [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,30): error C2143: 语法错误: 缺少“;”(在“<”的前面) [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“../../../../examples/shared/widgetframe/windowbar.cpp”) [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,54): error C2238: 意外的标记位于“;”之前 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“../../../../examples/shared/widgetframe/windowbar.cpp”) [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.cpp(220,16): error C2039: "w": 不是 "QObjectData" 的成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] D:\Qt\Qt5.12.10\5.12.10\msvc2017_64\include\QtCore\qobject.h(95,21): [build] 参见“QObjectData”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.cpp(255,32): error C2039: "autoIcon": 不是 "QObjectData" 的成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] D:\Qt\Qt5.12.10\5.12.10\msvc2017_64\include\QtCore\qobject.h(95,21): [build] 参见“QObjectData”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.cpp(262,32): error C2039: "autoTitle": 不是 "QObjectData" 的成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] D:\Qt\Qt5.12.10\5.12.10\msvc2017_64\include\QtCore\qobject.h(95,21): [build] 参见“QObjectData”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.cpp(288,37): error C2789: “QWK::WindowBar::unique_ptr”: 必须初始化常量限定类型的对象 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,20): [build] 参见“QWK::WindowBar::unique_ptr”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.cpp(288,27): error C2614: “QWK::WindowBar”: 非法的成员初始化:“d_ptr”不是基或成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] windowitemdelegate.cpp [build] mocs_compilation_Release.cpp [build] nativeeventfilter.cpp [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,20): error C2039: "unique_ptr": 不是 "std" 的成员 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“WidgetFrame_autogen/mocs_compilation_Release.cpp”) [build] D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\include\functional(31,1): [build] 参见“std”的声明 [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,30): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“WidgetFrame_autogen/mocs_compilation_Release.cpp”) [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,30): error C2143: 语法错误: 缺少“;”(在“<”的前面) [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“WidgetFrame_autogen/mocs_compilation_Release.cpp”) [build] [build] D:\FireFly\qwindowkit\examples\shared\widgetframe\windowbar.h(65,54): error C2238: 意外的标记位于“;”之前 [D:\FireFly\qwindowkit\build\examples\shared\widgetframe\WidgetFrame.vcxproj] [build] (编译源文件“WidgetFrame_autogen/mocs_compilation_Release.cpp”)
噢应该是少了个头文件,我去加一下。
麻烦您再试试。
好了,编译测试都OK了,谢谢
尊敬的作者,您好, 目前测试Qt5.12.10 + VS2019编译出错, 1, 缺少头文件
<QtCore/private/qwinregistry_p.h>
, 这个我找了一下,确实5.12没有这个文件 2,缺少Q_DISABLE_COPY_MOVE
这个宏