Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 逗号运算符的左右操作数无效(警告)_C++_Class_Constructor_Warnings_Comma - Fatal编程技术网

C++ 逗号运算符的左右操作数无效(警告)

C++ 逗号运算符的左右操作数无效(警告),c++,class,constructor,warnings,comma,C++,Class,Constructor,Warnings,Comma,我在我的类中的构造函数中得到一个警告,我以前从未见过它。这就是我的构造函数的样子 Account(std::string n = "NULL", std::string i = "0", Stats s = (0,0,1) ) : name(n), id(i), stat(s) {} 如果删除这些逗号中的任何一个,都会导致编译错误,不是吗? 此警告是否不正确,或者我是否可以更改某些内容来修复它?问题在于:0,0,1 这是表达式0,0,1周围的括号,该表达式的计算结果为

我在我的类中的构造函数中得到一个警告,我以前从未见过它。这就是我的构造函数的样子

    Account(std::string n = "NULL", std::string i = "0", Stats s = (0,0,1) ) 
        : name(n), id(i), stat(s) {}
如果删除这些逗号中的任何一个,都会导致编译错误,不是吗? 此警告是否不正确,或者我是否可以更改某些内容来修复它?

问题在于:0,0,1

这是表达式0,0,1周围的括号,该表达式的计算结果为1。逗号运算符是一个中缀运算符,用于计算第一个和第二个表达式并返回第二个表达式。在本例中,您有两个这样的操作符

我不知道你想要什么,但我猜那不是

编辑:似乎您需要统计数据s0,0,1。

问题是:0,0,1

这是表达式0,0,1周围的括号,该表达式的计算结果为1。逗号运算符是一个中缀运算符,用于计算第一个和第二个表达式并返回第二个表达式。在本例中,您有两个这样的操作符

我不知道你想要什么,但我猜那不是


编辑:似乎您需要统计数据s0,0,1。

问题最有可能出现在统计数据s=0,0,1的部分。C++将此视为要计算的表达式序列,而只保留最后一个值。它返回1。你可能是说

Stats s = Stats(0,0,1)
如果你的统计结构有这样一个构造函数,它就可以工作。请注意,在C++11中,您有以下较短的语法:

Stats s = {0,0,1}

问题最有可能出现在Stats s s=0,0,1的部分。C++将此视为要计算的表达式序列,而只保留最后一个值。它返回1。你可能是说

Stats s = Stats(0,0,1)
如果你的统计结构有这样一个构造函数,它就可以工作。请注意,在C++11中,您有以下较短的语法:

Stats s = {0,0,1}


我想你要找的是给函数参数一个默认值,它是一个结构,我想这里已经讨论过了

我想你要找的是给函数参数一个默认值,它是一个结构,我想这里已经讨论过了

如果你真的复制了警告,我可以帮你。我在标题中写了警告,省略了[-Wunused value],如果你真的复制了警告,我可以帮你。我在标题中写了警告,省略了[-Wunused value],我不确定这是否有效。初始化结构时需要使用常规括号。大括号用于初始化数组。@EnginKayraklioglu不,这是错误的。在C++11之前,在某些情况下是正确的,而不是在这个情况下。@juanchopanza感谢您的解释。也许在旧版本中也是合法的,我只是从来没有遇到过这种情况。@EnginKayraklioglu Pre-C++11,这取决于统计数据是否是一个聚合。是的,大括号去掉了这个警告。但是如果使用c++11之前的版本,它们将无法工作。我不确定这是否有效。初始化结构时需要使用常规括号。大括号用于初始化数组。@EnginKayraklioglu不,这是错误的。在C++11之前,在某些情况下是正确的,而不是在这个情况下。@juanchopanza感谢您的解释。也许在旧版本中也是合法的,我只是从来没有遇到过这种情况。@EnginKayraklioglu Pre-C++11,这取决于统计数据是否是一个聚合。是的,大括号去掉了这个警告。但是如果使用c++11之前的版本,它们就不起作用了;我用它来分隔初始化值。我只是重新阅读了这个问题,意识到我给了你一个错误的建议。该语法不能用于默认参数。。。我很抱歉。。。这是另一个构造函数,由statint,int,int组成;我用它来分隔初始化值。我只是重新阅读了这个问题,意识到我给了你一个错误的建议。该语法不能用于默认参数。。。我很抱歉。。。除息的