c++ - C++ 类模板:“从这里需要”错误
问题描述
我正在学习 C++ 类模板。下面是我的代码。当我运行它时,我收到“从这里需要”的错误。如果有人能指出这个问题,那将是很大的帮助。错误行号对应于 frank 对象的实例化。
#include <iostream>
#include <string>
template <typename T>
class Data
{
private:
std::string name;
T value;
public:
Data(std::string n, T v) : value {v}, name {n}
{
}
~Data() = default;
T getValue()
{
return value;
}
std::string getName()
{
return name;
}
};
int main()
{
Data<int> frank {"frank", 35};
std::cout << std::endl;
}
添加构建日志:
C:\WINDOWS\system32\cmd.exe /C mingw32-make.exe -j 8 -e -f Makefile
"----------Building project:[ TestArea - Debug ]----------"
mingw32-make.exe[1]: Entering directory 'C:/Users/LPC/Documents/C_Plus_Plus/TestArea'
mingw32-make.exe[1]: Leaving directory 'C:/Users/LPC/Documents/C_Plus_Plus/TestArea'
mingw32-make.exe[1]: Entering directory 'C:/Users/LPC/Documents/C_Plus_Plus/TestArea'
g++ -c "C:/Users/LPC/Documents/C_Plus_Plus/TestArea/main.cpp" -g -O0 -std=c++14 -Wall -o ./Debug/main.cpp.o -I. -I.
C:/Users/LPC/Documents/C_Plus_Plus/TestArea/main.cpp: In instantiation of 'Data<T>::Data(std::__cxx11::string, T) [with T = int; std::__cxx11::string = std::__cxx11::basic_string<char>]':
C:/Users/LPC/Documents/C_Plus_Plus/TestArea/main.cpp:30:33: required from here
C:/Users/LPC/Documents/C_Plus_Plus/TestArea/main.cpp:10:7: warning: 'Data<int>::value' will be initialized after [-Wreorder]
T value;
^
C:/Users/LPC/Documents/C_Plus_Plus/TestArea/main.cpp:9:17: warning: 'std::__cxx11::string Data<int>::name' [-Wreorder]
std::string name;
^
C:/Users/LPC/Documents/C_Plus_Plus/TestArea/main.cpp:12:5: warning: when initialized here [-Wreorder]
Data(std::string n, T v) : value {v}, name {n}
^
g++ -o ./Debug/TestArea @"TestArea.txt" -L.
mingw32-make.exe[1]: Leaving directory 'C:/Users/LPC/Documents/C_Plus_Plus/TestArea'
====1 errors, 3 warnings====
解决方案
它与模板无关。
警告在这里是因为程序员经常(错误地)假设
: value {v}, name {n}`
表示value
在之前初始化name
。事实上,初始化顺序与声明顺序相匹配:
std::string name;
T value;
初始化顺序在您的情况下并不重要,但它确实很重要。因此,避免意外并使初始化程序出现的顺序始终与声明顺序相匹配通常是一个好习惯。所以就这样做吧。
推荐阅读
- asp.net-core-mvc - 尝试创建新控制器时,模式类字段中缺少 ApplicationUser 模型
- android - 每次如何在 Dagger 2 中向我的提供范围对象发送数据
- ios - ios UIImage 超出 UIImageView 边框
- laravel - 将代码重构为与数据库无关
- sql - 使用 has_many 的关联命令:通过 Ruby on Rails 中的关联
- algorithm - 给定一组 n 个整数,列出所有可能的子集,其中 k1<= sum <=k2 , k1 和 k2 浮点数
- java - 将 Android API 从 27 降级到 21 (KOTLIN) 后出错
- ubuntu - CMUSphinx-go PortAudio 错误:设备不可用
- laravel - Laravel 5 使用 2 个数据库连接加入 2 个表
- python - 在python中随机化快速排序,递归问题