gpt4 book ai didi

c++ - 为什么编译器会忽略模板类中的结构元素?

转载 作者:行者123 更新时间:2023-11-28 06:50:33 26 4
gpt4 key购买 nike

我正在使用 g++ 编译器。我写了下面的代码,它有一个模板类定义。该类有一个名为 node 的结构数据类型,它具有通用类型的元素 a 和 b。该类有一个名为 print 的函数,它打印 p.h,其中 p 是类对象的类型节点变量。尽管“h”不是结构节点的元素,但编译器不会显示任何错误。这是为什么?

    #include<iostream>
#include<cstdlib>

using namespace std;

template <typename e>
class mc
{
typedef struct node
{
e a,b;
}node;
node p;
public:
void print();
};

template <typename e>
void mc<e>::print()
{
std::cout<<p.h;
}

int main()
{
mc<int> m;
//m.print();
return(0);
}

只有当 m.print() 在 main 中取消注释时,编译器才会显示错误。这是为什么?

最佳答案

如果不使用模板的对象(实例),编译器只检查模板的逻辑。模板不会被实例化。但是,如果您尝试使用模板的实例,该模板将被实例化(扩展),然后您将看到 h 不是 p 的成员的错误。

也就是说,如果注释掉//m.print(),模板就会被实例化。

关于c++ - 为什么编译器会忽略模板类中的结构元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24038919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com