我是C++新手,我正在尝试创建一个程序,该程序从用户那里获取未知数据类型输入并将其存储在变量中。我正在使用可视化工作室进行编程,代码不断生成错误消息:E0304,LNK2019和LNK1120。
#include "stdafx.h"
#include <iostream>
template <typename T>
T dataEntered() {
T data;
std::cout << "Enter Data" << std::endl;
std::cin >> data;
return data;
}
int main()
{
auto data = dataEntered();
std::cout << sizeof(data) << std::endl;
return 0;
}`
Template
不是解决方案,除非你以这种方式使用它:
auto data1 = dataEntered<char>();
auto data2 = dataEntered<int>();
std::cout << sizeof(data1) << std::endl;
std::cout << sizeof(data2) << std::endl;
您应该传递类型参数,以便在编译时知道它。
如果您直到run-time
才知道数据,我建议您按string
读取数据,然后编写一个function
来根据需要对其进行解析。
模板和 auto 在编译时推导,其中 auto 基本上更改为从初始化值推导的类型,并为模板参数中使用的每个类型生成模板化版本的版本。
如果需要对输入执行操作,请在读取输入之前确定输入的类型。您也可以将其输入到字符串中并在以后解析。
如果不需要解析输入,只需输入到字符串中即可。
例如,如果输入的第一个字符是数字,则可能是数字。
我的代码:
#include <iostream>
#include <string>
#include <cctype>
int main()
{
if(std::isdigit(static_cast<unsigned char>(std::cin.peek())))
{
//the input is a number
int num;
std::cin >> num;
//do stuff with num
}
else
{
//input is something else
std::string str;
std::cin >> str;
//do stuff with str;
}
}