C++;检查类函数中的数据类型 我知道已经有几个类似于这个问题的答案了,但是我认为我在C++中缺乏经验是阻止我充分理解它们。

C++;检查类函数中的数据类型 我知道已经有几个类似于这个问题的答案了,但是我认为我在C++中缺乏经验是阻止我充分理解它们。,c++,validation,C++,Validation,问题:我有一个赋值,需要用户输入一个类型为“double”的值。然后,我需要将该用户输入传递到我创建的类的自定义方法中,并让该方法验证该输入是否确实是“double” 我看到一些帖子,人们在输入数据类型后立即使用while循环和cin操作符验证数据类型。这对我没有帮助,因为我需要验证方法中的数据类型 以下是我到目前为止的情况: Main.cpp: ... int main() { string name; double gpa; // value that should b

问题:我有一个赋值,需要用户输入一个类型为“double”的值。然后,我需要将该用户输入传递到我创建的类的自定义方法中,并让该方法验证该输入是否确实是“double”

我看到一些帖子,人们在输入数据类型后立即使用
while
循环和
cin
操作符验证数据类型。这对我没有帮助,因为我需要验证方法中的数据类型

以下是我到目前为止的情况:

Main.cpp:

...
int main() {

    string name;
    double gpa;   // value that should be validated

    cout << Enter GPA: ";
    cin >> gpa;

    myClass student_1;
    student_1.validateGPA(gpa); 

    return 0;
}
。。。
int main(){
字符串名;
double gpa;//应验证的值

cout
std::cin
是一个输入流。要从输入中获取格式化数据,可以使用:
。如果将输入流放在左侧,并且将一个变量的类型识别在右侧,
cin
将读取到其输入的末尾,并尝试将其解析为钻机上的任何数据类型ht手侧。幸运的是,操作员确实支持
double
。因此,要读取输入(字符串)并将其转换为十进制数(a
double
),您只需编写

double converted_number;
cin >> converted_number;
根据,您可以通过检查
cin.rdstate()
的值来验证格式化输入

双转换_数;
cin>>转换的\u编号;
if(cin.rdstate()!=goodbit){

这能回答您的问题吗?您得到的链接器错误确实与它是一个模板函数有关,请参阅。对于返回错误值的函数,请注意函数的参数是
gpa
,但您返回
typeid(newGPA)
。什么是
newGPA
?ETA:这并不重要,因为
main
保证无论用户输入什么,您都会将
double
交给
validateGPA
函数。您不会“检查数据类型”在C++中。你验证用户输入。你说“代码>双GPA < /代码>,它是代码>双< /代码>,没有什么可以检查的。@ NahanPixs<代码> NeWGPA < /C> >是GPA变量,只是一个转置错误,提出问题。up@n.'代词'm。如果用户输入一个字符串而不是一个double怎么办?当我在代码中这样做时,它会工作。代码打印t他滔滔不绝,但那不是我要找的。
template <class validation>
string myClass::validateGPA(validation gpa) {
    return typeid(newGPA).name();
} 
Severity    Code    Description Project File    Line    Suppression State
Error   LNK2019 unresolved external symbol "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall myClass::validateGPA<double>(double)" (??$validateGPA@N@myClass@@QAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@N@Z) referenced in function _main    GPA_Assignment  C:\Users\josep\source\repos\ccv\GPA\GPA\GPA_Assignment.obj  1   
double converted_number;
cin >> converted_number;