{
class Trouble{};
class Small:public Trouble {};
class Big:public Trouble {};
void f()
{
throw Big(); //这里如果把Big后面的括号去掉,就会产生c2275错误
}
};
//c2275错误的描述就是标题那里的
//illega use of this type as an expression
//这个错误在msdn里面也有个例子
typedef struct S
{
int mem;
}*S_t;
void func1(int *parm);
void func2()
{
func1(&S_t->mem); //c2275, S_t is a typedef
}
9 个解决方案
#1
语法错误。看了书就知道该怎么解决
#2
这里是typedef的问题。
S_t并不是一个对象,哪来的mem成员?!
S_t等价于struct S*,它是一个自定义的数据类型,你改成这样就可以了:
struct S
{
int mem;
}*S_t;
这样,S_t才是一个对象,typedef是定义一个别名,注意typedef的用法。
S_t并不是一个对象,哪来的mem成员?!
S_t等价于struct S*,它是一个自定义的数据类型,你改成这样就可以了:
struct S
{
int mem;
}*S_t;
这样,S_t才是一个对象,typedef是定义一个别名,注意typedef的用法。
#3
Big是类的名字,Big()是用构造函数产生一个实例。
#4
Big();是类的实例
Big是类
Big是类
#5
Big 是类,
Big类的实例应该这样定义:
Big a();
不能Big()
啊?
Big类的实例应该这样定义:
Big a();
不能Big()
啊?
#6
可以
new Big();
没见过
throw Big();
这样写的
不懂是什么意思;
new Big();
没见过
throw Big();
这样写的
不懂是什么意思;
#7
哦...是哦,感谢loujing先.
但是关于Big()那里好像还没弄懂.
为什么throw后面接着的不是一个对象呢?
就如popy007跟 windyloft说的,我弄不明白
return会否有一样的情况呢?例如
return Big();
这样?
但是关于Big()那里好像还没弄懂.
为什么throw后面接着的不是一个对象呢?
就如popy007跟 windyloft说的,我弄不明白
return会否有一样的情况呢?例如
return Big();
这样?
#8
顶一下...
#9
在c++中,如果compiler遇到某一个类的constructor,比如Big()的时候,它会
生成这个类的一个instance。也就是说不论有没有一个Big类的identifier接受
这个instance,它都回存在,尽管大多数情况下都使用Big identifier = Big()
的形式。因此,对于throw Big(),compiler首先会生成Big的instance,然后
在吧这个instance throw到异常处理的地方。
生成这个类的一个instance。也就是说不论有没有一个Big类的identifier接受
这个instance,它都回存在,尽管大多数情况下都使用Big identifier = Big()
的形式。因此,对于throw Big(),compiler首先会生成Big的instance,然后
在吧这个instance throw到异常处理的地方。
#1
语法错误。看了书就知道该怎么解决
#2
这里是typedef的问题。
S_t并不是一个对象,哪来的mem成员?!
S_t等价于struct S*,它是一个自定义的数据类型,你改成这样就可以了:
struct S
{
int mem;
}*S_t;
这样,S_t才是一个对象,typedef是定义一个别名,注意typedef的用法。
S_t并不是一个对象,哪来的mem成员?!
S_t等价于struct S*,它是一个自定义的数据类型,你改成这样就可以了:
struct S
{
int mem;
}*S_t;
这样,S_t才是一个对象,typedef是定义一个别名,注意typedef的用法。
#3
Big是类的名字,Big()是用构造函数产生一个实例。
#4
Big();是类的实例
Big是类
Big是类
#5
Big 是类,
Big类的实例应该这样定义:
Big a();
不能Big()
啊?
Big类的实例应该这样定义:
Big a();
不能Big()
啊?
#6
可以
new Big();
没见过
throw Big();
这样写的
不懂是什么意思;
new Big();
没见过
throw Big();
这样写的
不懂是什么意思;
#7
哦...是哦,感谢loujing先.
但是关于Big()那里好像还没弄懂.
为什么throw后面接着的不是一个对象呢?
就如popy007跟 windyloft说的,我弄不明白
return会否有一样的情况呢?例如
return Big();
这样?
但是关于Big()那里好像还没弄懂.
为什么throw后面接着的不是一个对象呢?
就如popy007跟 windyloft说的,我弄不明白
return会否有一样的情况呢?例如
return Big();
这样?
#8
顶一下...
#9
在c++中,如果compiler遇到某一个类的constructor,比如Big()的时候,它会
生成这个类的一个instance。也就是说不论有没有一个Big类的identifier接受
这个instance,它都回存在,尽管大多数情况下都使用Big identifier = Big()
的形式。因此,对于throw Big(),compiler首先会生成Big的instance,然后
在吧这个instance throw到异常处理的地方。
生成这个类的一个instance。也就是说不论有没有一个Big类的identifier接受
这个instance,它都回存在,尽管大多数情况下都使用Big identifier = Big()
的形式。因此,对于throw Big(),compiler首先会生成Big的instance,然后
在吧这个instance throw到异常处理的地方。