c++ - 使用空标签结构,编译器声称我缺少初始化程序,但我不是
问题描述
好的,我知道这类似于为什么编译器会抛出此警告:“缺少初始化程序”?结构没有初始化吗?,但是 GCC 肯定不会愚蠢到认为我的意思是初始化没有初始化的东西?.
//main.cpp
struct IsNamed{
};
template<typename T>
struct Test{
int foo;
};
struct Test2 : public Test<double>, public IsNamed{
};
int main(){
Test2 x;
Test2 y = Test2{Test<double>{}};
return 0;
}
这是输出:
main2.cpp: In function 'int main()':
main2.cpp:18:35: warning: missing initializer for member 'Test2::<anonymous>' [-Wmissing-field-initializers]
18 | Test2 y = Test2{Test<double>{}};
| ^
main2.cpp:16:11: warning: unused variable 'x' [-Wunused-variable]
16 | Test2 x;
| ^
main2.cpp:18:11: warning: variable 'y' set but not used [-Wunused-but-set-variable]
18 | Test2 y = Test2{Test<double>{}};
|
我感到困惑的唯一警告是“缺少成员 'Test2:: 的初始值设定项”警告。这没有道理。我只需要一个可能的值,我提供了它。只是为了证明确实是在继承链中包含空类导致了这种情况,如果我删除它,这是输出:
main2.cpp: In function 'int main()':
main2.cpp:16:11: warning: unused variable 'x' [-Wunused-variable]
16 | Test2 x;
| ^
main2.cpp:18:11: warning: variable 'y' set but not used [-Wunused-but-set-variable]
18 | Test2 y = Test2{Test<double>{}};
|
人们说忽略它,但这对我的项目不可行。我有很多带有此错误的类,它们遵循相同的标签结构模式。选择性地禁用此警告是不合理的(我也发现它在其他情况下很有用)。
如何让编译器停止抱怨这个?我还应该提到这Test2{Test<double>{},{}};
不是一个合适的解决方案,因为我使用了模板代码,其中一些类没有这个问题,有些有,这意味着在这些情况下这会变成一个错误。
编辑:
注意这里是使用的示例 CMake,其中包括编译器选项:
cmake_minimum_required(VERSION 3.13)
project(test)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)
add_executable(test main.cpp)
target_include_directories(test
PRIVATE
./
)
target_compile_options(test PRIVATE
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:GNU>>:
-Wall -Wextra -Wshadow -Wnon-virtual-dtor -pedantic -g -ggdb -O1>)
我也在使用 mingw64-10.2
解决方案
我只需要一个可能的值,我提供了它
警告不是关于提供您“需要”的值。毕竟,编译器通常无法知道您认为需要哪些值。
警告是关于提供所有初始化程序。并且没有其他基础的初始化程序。
如何让编译器停止抱怨这个?
提供缺少的初始化程序:
Test2 y = Test2{Test<double>{}, {}};
或者只是禁用警告。或者使用另一个编译器;例如,Clang 似乎不会在您的情况下发出警告。
推荐阅读
- c - 为什么我的静态变量在运行时会不对齐?
- git - 我有一个项目/文件夹的两个 .git 目录,如何重命名工作树中的文件?
- sqlite - SQLite C API 等效于 typeof(col)
- mxgraph - 如何将新属性添加到自定义边缘形状
- java - 如何使用 Selenium 和 Java 单击文本为 Ok 的元素
- node.js - 使用带有 multer 中间件的 axios post 发送文件时服务器响应“未定义”
- c# - 在 PowerPoint OpenXml C# 中访问特定的 TextBody
- swiftui - PickerView:如何水平居中并且没有空间?
- javascript - 推送通知切换选项在 xcode 11 中不可用。连能力都没有
- firebase - Flutter:尝试将视频上传到 firebase_storage 时,“file.existsSync()”在 IOS 设备上似乎总是错误的