|
发表于 2009-11-4 00:41:33
|
显示全部楼层
IP:江苏扬州
感谢大家的回答,我的程序部分代码是这样的,,
#include<iostream>
#include<memory>
#include<stdexcept>
#include<string>
using namespace std;
class Exce : public runtime_error {
public:
Exce( int val, const string & s = "aa" ) ://这了采用复制初始化,编译通过
_val( val ), runtime_error( s ){ }
int value() { return _val; }
private:
int _val;
};
Exce a(12, "bb");
//此处声明一个对象,编译没问题,但是如果构造函数里s="aa"写成s("aa")就行不通,编译器提示:no matching function for call to 'Exce::Exce(int ,const char[3]),
candidates are: Exce::Exc(const Exce&)
Exce::Exc(int)
而在s("aa")时,若声明对象形如 Exce a(12);则没有问题,c++primer上说变量初始化分直接初始化s("aa")和复制初始化s="aa",而在函数形参表里一般只能用复制初始化,但在直接初始化下有人用GCC3.4编译通过了,不知是不是有编译器支持直接初始化。
所以我现在疑惑到底是哪边出了问题,仅仅是不符合参数表定义形式吗?
请大家帮忙分析一下,。。。 |
|