Visual Studio 2017 C ++,不能使用typeid()来获取信息对象,缺少指针?;

时间:2018-09-30 10:37:04

标签: c++ typeid

那是我在xD的第一篇文章。

最近,经过几年的休息,我开始使自己想起c ++领域的知识。以前,我在C#工作。

作为练习的一部分,我开始编写用于生成汽车类的代码,然后输入和写入数据。 但是我遇到了一个问题。作为练习的一部分,我想使用函数typeid()编写对象的名称,并找出什么是hash_code。 但是我有两个错误,我不能做什么。 如何正确声明指针。

#include "pch.h"
#include <iostream>
#include <string>

using namespace std;

class Car {
public:
    string _mark;
    string _model;
    int _year;
    int _course;

    void UploadData()
    {
        cout << "Set values" << endl;
        cin >> _mark;
        cin >> _model;
        cin >> _year;
        cin >> _course;
        cout << "Values uploaded"<<endl;
    }

    void Write()
    {
        cout << typeid(this).name <<" " << typeid(this).hash_code << " " << " mark " << _mark << " model " << _model << " year " << _year << " course " << _course;
    }
};

int main()
{
    Car test1;
    test1.UploadData();
    test1.Write();
}

错误消息:

  

严重性代码描述项目文件行抑制状态   错误C3867'type_info :: name':非标准语法;使用“&”创建   指向成员的指针

     

严重性代码描述项目文件行抑制状态   错误C3867'type_info :: hash_code':非标准语法;使用“&”来   创建一个指向成员的指针

1 个答案:

答案 0 :(得分:3)

namehash_code是类std::typeinfo的成员函数,因此您需要使用括号:

cout << typeid(this).name() <<" " << typeid(this).hash_code()
     << " " << " mark " << _mark << " model " << _model << " year " << _year
     << " course " << _course;

很遗憾,您收到的错误消息令人误解。编译器认为您正在尝试做完全不同且更高级的操作。

但是请注意,typeid(this)将与typeid(Car*)完全相同。如果您改写了typeid(*this),则与typeid(Car)相同。 typeid运算符在具有至少一个虚函数的类上使用时开始变得更加有趣。...