在Visual Studio 2012中编译C ++代码时,为什么会出现错误C2228?

时间:2016-01-14 23:13:35

标签: c++ visual-studio-2012

尝试编译此代码时出现几个错误:

>>> def in_ranges(x, range_tuples):
...     return any(t[0] <= x < t[1] for t in range_tuples)
>>>
>>> range_tuples = [(64600,64799), (67000,67319), (67399,67600),
...                 (68000,68699), (69400,69599)]
>>>
>>> with open('testfile') as f:
...     for number in map(int, f.read().split()):
...         if in_ranges(number, range_tuples):
...             sign = '+'
...         else:
...             sign = '-'
...         print '|{}{}|'.format(number, sign)
... 
|68278+|
|63989-|
|64283-|
|65917-|
|66503-|
|68794-|
|68299+|
|64827-|
|65294-|
|68783-|
|68857-|
|68459+|
|66552-|
|63053-|
|66588-|
|68162+|
|67316+|
|66742-|
|65008-|
|64327-|
|65320-|
|68307+|
|65798-|
|65198-|
|67868-|
|67157+|
|63526-|
|63917-|

错误代码为C2228。 &#34;&#39; .data&#39; /&#39; .size&#39;必须有班级类型。

1 个答案:

答案 0 :(得分:0)

您的第一行代码含糊不清:显然,您希望定义名为vector的{​​{1}} char。但是,由于C ++中的句法歧义解析,称为most vexing parse(在@nm的注释中也有提及),你的第一行被解释为一个名为vsData的函数的函数声明,需要两个参数并返回vsData vector

正如我在上面链接的文章中所解释的,强制编译器将第一行视为变量定义的一种方法是添加一对额外的括号:

char