0

所以我有以下结构定义

struct  sCount { U32 _; };
typedef sCount tCount;

但是当我尝试执行以下代码时:

tCount Count = (U32)atoi(arg[10].c_str());

我收到一个错误:不存在合适的构造函数来从 U32 转换为 tCount。关于如何解决这个问题的任何建议?

4

3 回答 3

3

我特别不喜欢你做事的方式,但聚合初始化会做你想做的事:

tCount Count = { (U32)atoi(arg[10].c_str()) };

或者,您可以提供一个采用适当类型的构造函数。

于 2013-07-26T21:18:24.807 回答
3

在这段代码中tCountU32是不同且不相关的类型。它们之间没有隐式或显式的转换。相反,该tCount类型包含一个U32. 您需要将U32值分配给该字段`

tCount Count;
Count._ = (U32)atoi(arg[10].c_str());

或者更好的是,定义一个将值作为参数的构造函数。这也将启用隐式版本案例

struct sCount {
  sConut(U32 value) : _(value) { } 
  U32 _;
}

注意:鉴于该成员sCount::_是公开的,如果它有一个比_

于 2013-07-26T21:21:11.793 回答
1

正如错误所说,您需要创建一个构造函数。只需有一个带有单个 int 参数的构造函数,您就可以从 int 'cast' 到 class/struct 类型。

于 2013-07-26T21:19:18.127 回答