- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,我知道这与此类似 Why is the compiler throwing this warning: "missing initializer"? Isn't the structure initialized? ,但 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
最佳答案
There's only one possible value I would need, and I provide it
警告不是关于提供您“需要”的值。毕竟,编译器通常无法知道您认为需要哪些值。
警告是关于提供所有初始化程序的。并且没有其他基地的初始化程序。
How do I get the compiler to stop complaining about this?
提供缺少的初始化器:
Test2 y = Test2{Test<double>{}, {}};
或者只是禁用警告。或者使用另一个编译器;例如,Clang 似乎不会在您的案例中发出警告。
关于c++ - 使用空标记结构,编译器声称我缺少初始化器,但我不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65896839/
我正在尝试解决为什么 Ruby 没有用空格分割我的字符串。例如: [1] pry(#)> msg => "!iex [email protected]|[email protected]> Firs
我正在尝试解决为什么 Ruby 没有用空格分割我的字符串。例如: [1] pry(#)> msg => "!iex [email protected]|[email protected]> Firs
这是我的 API 端点: [HttpPost] public int Post(SearchHistory searchHistory) { IDashboardRepository dash
我正在按照these guidelines验证来自Facebook API的signed_request参数。 ,但我在调用 Commons Codec 中的 Base64 类的某些方法时遇到了问题。
我有一个 json 结构数组: { data : [ { "num" : val , "time" : val } , ... ] } 我需要找到 num 的最大值和最短/最长时间,以及将对象移动到
我使用 Xcode 的 Refactor > Rename 命令尝试重命名 C 中的方法参数 this。 它声称 this 是“保留语言关键字”,但据我所知,事实并非如此。 这是 Xcode 中的错误
有人刚刚给我看了 A byte of Python 的旧 PDF 版本.根据本身,它是 3.0 版(本书的,而不是 Python 的),从 2014 年开始。在 Operators 部分, 有一个部分
问题: 您在 Intellij 中使用 VCS 系统并尝试提交内容。提交失败,Intellij 声称 index.lock 存在。你检查你的 repo 目录中的 .git/index.lock,发现它
我有以下 SAM 模板: AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Descriptio
这可能看起来微不足道,但我使用 Excel 来操作程序中的一些数据,然后以 tsv 格式输出数据。我想用 gnuplot 来绘制它,其复杂性不比 plot "filename" 复杂,但 gnuplo
我正在使用嵌入式 Jetty 启动标准 Java 网络应用程序。我的启动器是这样的: import org.eclipse.jetty.server.Server; import org.eclips
我正在阅读 Joshua Bloch 的 Effective Java,第 2 版,第 11 条:明智地覆盖克隆。 在第 56 页,他试图解释当我们重写某些类(如集合类)的 clone() 时,我们必
问题: 如 Fusion Location Provider API 所声称的,位置更新在室内不起作用。 发生了什么: 我尝试在我的 Android 应用程序中使用 LocationClient 实现
所以我只是尝试使用 NDK 构建一个库。我相信 Android.mk 和 Application.mk 文件是正确的,但它们是否正确无关紧要。 在NDK目录下执行make APP=hello时 And
我在 Android Studio 中尝试为我的模拟器安装 HAXM 时遇到了困难。我有一台 hp2000 笔记本;我将 Windows 8.1 更新到 Windows 8.1 Pro 以激活 Hyp
在我的程序中,我正在下载 misc。 PDF 文档,最后我想使用 Apache pdfbox (v1.8.8) 将它们合并到一个组合文档中。出于某种奇怪的原因,PDFMergerUtility 未能声
我正在尝试使用预先编写的接口(interface)编写队列类。接口(interface)包含方法 public void enqueue(T element); 我的类(class)看起来像 impo
有这样的东西: $(document).ready(function() { $("#myTable").dataTable({
我最近将一个 Android 应用程序从 Eclipse 移植到 Android Studio。我能够调试应用程序,甚至能够构建一个供客户端测试的发布版本。不幸的是,我不能再调试了。当我尝试从 And
每次,我在 Gerrit 中看到我的更改的 merged 状态并且我执行 git pull origin,我可以清楚地看到,我的更改/分支实际上没有已 merge 到 master 中。 请检查我的
我是一名优秀的程序员,十分优秀!