关于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};
}
一是错误的 二确是正确的 为什么??
如果要使二也正确 并且保持构造函数有两个参数 要怎么改??
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;