关于c++类的问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 01:46:38
一:
class A
{
int n;
int k;
public:
A(int i,int w){n=i,k=w;};
};
int main()
{
A a[6]={{1,1},{1,1},{1,1},{1,1},{1,1},{1,1}};
}
///////////////////////////////////////////////////////////
二:
class A
{
int n;
public:
A(int i){n=i;};
};
int main()
{
A a[6]={1,1,1,1,1,1};
}

一是错误的 二确是正确的 为什么??
如果要使二也正确 并且保持构造函数有两个参数 要怎么改??

因为第一个的
A a[6]={{1,1},{1,1},{1,1},{1,1},{1,1},{1,1}};
后面的元素是一个数组,不能转换为A或者A的构造函数类型。

而第二个的
A a[6]={1,1,1,1,1,1};
却可以,因为构造函数参数刚好合适。

可以把第一个改为
A a[6]={ A(1, 1), A(1, 1), A(1, 1), A(1, 1), A(1, 1), A(1, 1) };

错误消息
“identifier”: 不能用初始值设定项列表初始化非聚合

错误地初始化了聚合标识符。

聚合定义为:

数组

没有以下内容的类、结构和联合:

构造函数

私有或受保护的成员

基类

虚函数

另外,Visual C++ 不允许在包含构造函数的聚合中使用数据类型。

以下内容表示在某一类型上尝试聚合初始化时可能引发 C2552 的原因:

类型具有一个或多个用户定义的构造函数。

类型具有一个或多个非静态的、私有数据成员。

类型具有一个或多个虚函数。

类型具有基类。

类型是 ref 类或 CLR 接口。

类型是标量 (int i = {};)

类型具有其元素具有析构函数的非固定维数组(从零开始的数组)。

下面的示例生成 C2552:

复制代码
// C2552.cpp
// compile with: /clr
#include <string>
using namespace std;

struct Pair_Incorrect {
private:
string m_name;
double m_val;