【问题标题】:Using typeid keyword C++使用 typeid 关键字 C++
【发布时间】:2015-04-04 14:09:46
【问题描述】:

我有一个代码,我想使用 typeid 关键字显示数组指针的类类型,但是当我写cout <<typeid (Food[1]);编译错误!错误:没有操作符“

class food{
public:
    string getkind(){
        return kind;
    }
    virtual void setkind(){
    kind = "Apple";
    }
    // complete the set functions
private:
    string  kind;

};
int main()
{
    food *Food[3];
    derived1 obj1;
    derived2 obj2;
    derived3 obj3;
    Food[0]=&obj1;
    Food[1] = &obj2;
    Food[2] = &obj3;
    cout << typeid (food[1]);//Error ! Why? 


    system("Pause");
    return 0;
}

【问题讨论】:

  • 什么编译错误?请出示。
  • 您需要MCVE 和完整的错误消息。
  • 请提供错误信息和编译错误的代码sn-p,这样就帮不上忙了
  • 还有编译器名称和用于编译代码的命令行...您可能需要启用 RTTI 才能使其工作。
  • 试试std::cout &lt;&lt; typeid(Food[1]).name();

标签: c++ class


【解决方案1】:

MCVE

#include <iostream>
#include <typeinfo>

class X {};

int main() {
    std::cout << typeid(X) << "\n";
}

错误信息:

foo.cc:7:15: error: invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and 'const std::type_info')
    std::cout << typeid(X) << "\n";
    ~~~~~~~~~ ^  ~~~~~~~~~

修复:

typeid(X) 返回一个std::type_info 对象。它有一个非常有用的命名方法,称为name

更好的代码:

#include <iostream>
#include <typeinfo>

class X {};

int main() {
    std::cout << typeid(X).name() << "\n";
}

更好的输出(定义的实现):

1X

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多