这个编译错误很奇怪error C2440: 'initializing' : cannot convert

damo_xu 2009-04-03 07:04:55
struct AAA
{
vector<int> x;
}

class BBB
{
private: static AAA a;
};

AAA BBB::a = {0};


error C2440: 'initializing' : cannot convert from 'int' to 'std::vector<_Ty>'

奇怪的是,我在别的class里的静态变量也是这么定义的,没有出毛病,这个就出错了,不知为何?多谢了。
...全文
2517 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ltc_mouse 2009-04-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 damo_xu 的回复:]
可不可以这样:
反正是static,默认都是赋0的,定义的时候就这样:
AAA BBB::a;
//而不是AAA BBB::a = {0};
[/Quote]
给AAA提供一个默认构造函数好一点,可以按自己的意愿给AAA的不同成员分别初始化~
damo_xu 2009-04-04
  • 打赏
  • 举报
回复
多谢Itc_mouse给的例子,我稍稍变了一下我刚才的代码的位置,用"= {0}"编译竟然通过了!
typedef struct AAA
{
vector<int> i;
double y;
}AAA; // 编译通不过 !

typedef struct AAA
{
double y;
vector<int> i;
}AAA; // 编译竟然通过了!


看来这个"= {0}"不是很安全,如果要用,必须得在成员前面有基础变量(int或double)?

还有个想法:我说得如果有默认构造函数的情况,下面两个写法是不是比"= {0}"安全些?

AAA BBB::a; // 适用静态的成员的初始化
AAA BBB::a = AAA(); // 适用静态的成员的初始化
ltc_mouse 2009-04-04
  • 打赏
  • 举报
回复
在C中,"={0}"这种初始化方式,是指定结构或数组前面几个元素为特定的值,后面的元素为0
在C++中应该是指定的变量调用其带int参数的构造函数,未指定的调用默认构造函数~ (没研究C++规范,属个人推测,还请清楚的朋友指正)

class CCC{
int val;
public:
CCC(){ val = -1; cout<<"CCC::CCC()"<<endl; }
CCC(int v){ val = v; cout<<"CCC::CCC(int)"<<endl; }
};
struct AAA
{
int y;
CCC c1;
CCC c2;
vector<int> x;
};

class BBB
{
private:
static AAA a;
};

AAA BBB::a = {2,1};
damo_xu 2009-04-04
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 ltc_mouse 的回复:]
可不可以这样:
反正是static,默认都是赋0的,定义的时候就这样:
AAA BBB::a; //而不是AAA BBB::a = {0};
给AAA提供一个默认构造函数好一点,可以按自己的意愿给AAA的不同成员分别初始化~
[/Quote]

只想给AAA提供一个(或不提供)最原始的默认构造函数 "AAA() {}"。
因为我写AAA这个class的最初目的是把它设成一个集成体,意思是BBB日后不管需要什么成员,都
往AAA里面塞就行,简化BBB的默认构造函数。
比如现在class AAA
{
int x;
vector<class XXX> v;
set<class YYY> s;
}
日后我觉得BBB如果需要一个multimap<class ZZZ>,就往AAA里一搁完事,根本不用再重写BBB的构造函数,对吧?
当然这样是有代价的:
class XXX,YYY, ZZZ, 都必须提供默认构造函数,而且它们和BBB,都必须初始化后另行赋值。

另:"= {0}" 是C语言风格,有什么规定吗?
woods2001 2009-04-03
  • 打赏
  • 举报
回复
路过 看看
ybtsdst 2009-04-03
  • 打赏
  • 举报
回复

typedef struct AAA
{
//这里添加构造函数
public:
AAA(int a)
{
i = vector<int>(a);
}
private:
vector<int> i;
}AAA;
class BBB
{
private:
static AAA a;
};
//修改
AAA BBB::a = AAA(1);

AAA BBB::a = {0};
这样没法给AAA对象初始化。
damo_xu 2009-04-03
  • 打赏
  • 举报
回复
typedef struct AAA
{
vector<int> i;
double y;
}AAA;
class BBB
{
private: static AAA a;
};

AAA BBB::a = {0};


又创立了个新工程,上面代码通不过。

晕,我刚才那个工程里有2个class是都是这么调试通过的!!!
正在找区别:
一个class是单件,可能没有创立对象,里面全是static方法?
另一个class没什么特别。
damo_xu 2009-04-03
  • 打赏
  • 举报
回复
可不可以这样:
反正是static,默认都是赋0的,定义的时候就这样:
AAA BBB::a;
//而不是AAA BBB::a = {0};
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 damo_xu 的回复:]
引用 6 楼 hairetz 的回复:
class BBB
{
private: static AAA a;
};
AAA BBB::a = {0}; 这样肯定有问题啊,AAA里有个vector <int>数据,不能这样初始化的.


我的另一个class恰恰就是这么定义的,没有报错。今天又写一个class,这么定义就出错了。
[/Quote]

typedef struct AAA
{
double y;
}AAA;

你这样还可以接收,里面是个double数据啊.
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 damo_xu 的回复:]
引用 6 楼 hairetz 的回复:
class BBB
{
private: static AAA a;
};
AAA BBB::a = {0}; 这样肯定有问题啊,AAA里有个vector <int>数据,不能这样初始化的.


我的另一个class恰恰就是这么定义的,没有报错。今天又写一个class,这么定义就出错了。
[/Quote]

typedef struct AAA
{
double y;
}AAA;

你这样还可以接收,里面是个double数据啊.
fairchild811 2009-04-03
  • 打赏
  • 举报
回复
各个编译器不一样把,貌似borland的可以={0}
damo_xu 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hairetz 的回复:]
class  BBB
{
private: static AAA a;
};
AAA BBB::a = {0};  这样肯定有问题啊,AAA里有个vector <int>数据,不能这样初始化的.
[/Quote]

我的另一个class恰恰就是这么定义的,没有报错。今天又写一个class,这么定义就出错了。
damo_xu 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 akirya 的回复:]
AAA BBB::a=vector<int>();
[/Quote]

VS2008编译还是通不过.

关键问题是:
1》= {0} 这个用法在另一个文件的class里是没有问题的,为什么?
2》我想把这个成员集成,
比如:
typedef struct AAA
{
double y;
vector<int> v1;
vector<class 某> v2;
multimap<int, 某某> m;
}AAA;

这样怎么赋初值?
  • 打赏
  • 举报
回复
class BBB
{
private: static AAA a;
};

AAA BBB::a = {0}; 这样肯定有问题啊,AAA里有个vector<int>数据,不能这样初始化的.
野男孩 2009-04-03
  • 打赏
  • 举报
回复
AAA BBB::a = {0};

vector对象不能这样初始化。
damo_xu 2009-04-03
  • 打赏
  • 举报
回复
typedef struct AAA
{
double y;
}AAA;


不是这个问题。
而且我在另一个class CCC里就是这么定义的,没有报错,所不同的是那个class CCC是单件。

  • 打赏
  • 举报
回复
struct AAA
{
vector<int> x;
}

class BBB
{
private: static AAA a;
};

AAA BBB::a = vector<int>();

mengde007 2009-04-03
  • 打赏
  • 举报
回复
a是私有的,藐视不能这样吧。
hemiya 2009-04-03
  • 打赏
  • 举报
回复
x是vector<int>,不是int.
源码下载地址: https://pan.quark.cn/s/40677b766bda "ContextCapture 倾斜摄影快速、创新及全面空三建模与单机集群硬件部署方案2018" 此资源聚焦于倾斜摄影(ContextCapture)空三建模及单机集群硬件部署方案,致力于为用户呈现最快、最优成本效益的台式工作站、移动工作站、并行集群的多样化部署选择。以下是该资源的详细知识点概述: 一、相关设备型号说明 * UltraLAB 是西安坤隆计算机科技有限公司推出的专属图形工作站品牌,具备三大卓越优势:顶尖的计算硬件架构、精准的行业应用定制服务、专业的硬件系统优化工艺。 二、硬件部署方案 * 台式工作站部署建议:设备特色在于当前市场上最快的台式计算架构,适用于办公场景下,部门层级常规的倾斜摄影空三处理、三维建模。 * 便携式工作站部署建议:设备特色在于当前市场上最快的移动计算架构,适用于移动倾斜摄影的空三处理、三维建模工作站。 * 大数据量处理工作站推荐:设备特色在于极限自动超频加速与16个并行存储构造,具备空三处理和三维建模最强的计算性能及海量高速并行存储性能。 * 多设备并行计算集群部署建议:针对海量图像数据计算产生的巨大需求,单机计算能力处理时间过长,效率不高,通过多台机器并行集群,进行空三处理、三维建模,显著减少处理时间。 三、部署方案深入解析 * 2.1 倾斜摄影建模(台式工作站)部署方案:设备特色在于最高的计算处理能力~6核5.2GHz,内存最大配置可达64GB,配备最新图灵架构的RTX显卡,相比市场其他品牌机器(单CPU、双Xeon处理器)更快、更具成本效益。 * 2.2 倾斜摄影建模(移动便携式工作站)硬件部署方案:设备特色在于最高的计算处理能力~6...

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧