急 c++ 模板 一个类如何声明另一个类中的内嵌类的指针
答案:2 悬赏:0 手机版
解决时间 2021-03-10 17:11
- 提问者网友:龅牙恐龙妹
- 2021-03-09 23:05
有2个模板类A,C,类A中有一个内嵌模板类B(权限为public),现在类C引入了类A。
请问能不能在类C中声明一个类B类型的指针,如果可以怎么声明
环境为VS2012 请测试可行后在回答谢谢。
项目1:
template
class A
{
public:
template
class B{...};
...一些声明...
};
项目2:
#include "../项目1/A.h"
template
class C
{
private:
能不能声明类B类型的指针?
// A::B *b;//这样是错的
//A::B *b;//语法上没有问题但是编译时通不过因为使用模板类需要模板参数列表
};
最佳答案
- 五星知识达人网友:神的生死簿
- 2021-03-10 00:03
问题:急 c++ 模板 一个类如何声明另一个类中的内嵌类的指针
回答:这样声明不可以吗
class C
{
private:
A::B *b;
};
全部回答
我不知道为什么空指针不能类型检查,我想大概因为它是“空”的吧。
不过我知道,空指针是这样的,
cha*k=0;//null
k是空指针。
大家一块讨论
qq:380208702
看到上下楼的回答,我无语了
首先:
void*这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容的操作.必须先转成别的类型的指针才可以把内容解释出来.
还有'\0',这也不是空指针所指的内容.'\0'是表示一个字符串的结尾而已,并不是null的意思.
真正的空指针是说,这个指针没有指向一块有意义的内存,比如说:
char*k;
这里这个k就叫空指针.我们并未让它指向任意地点.
又或者
char*k=null;
这里这个k也叫空指针,因为它指向null也就是0,注意是整数0,不是'\0'
一个空指针我们也无法对它进行取内容操作.
空指针只有在真正指向了一块有意义的内存后,我们才能对它取内容.也就是说要这样
k="helloworld!";
这时k就不是空指针了.
再就是,我感觉,“许多现在以空指针为参数的函数都可以用模板来实现”,中的“空指针”并不是说空指针,而是void*(无确切类型指针)
如果函数的参数可以是任意类型指针,那么应声明其参数为void*(想一下模板,是不是有点类似?)
典型的如内存操作函数memcpy和memset的函数原型分别为:
void*memcpy(void*dest,constvoid*src,size_tlen);
void*memset(void*buffer,intc,size_tnum);
这样,任何类型的指针都可以传入memcpy和memset中,这也真实地体现了内存操作函数的意义,因为它操作的对象仅仅是一片内存,而不论这片内存是什么类型。空指针仅仅是申明了一个变量名,告诉编译器有个变量存在,当然你后面肯定会用到它(事实上你不用也没人怪你)。
注意c++中语法要求更严格,不允许直接对空指针赋值,而必须先进行类型转换。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯