Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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++;? 这越来越烦人了_C++_Initialization_Declaration - Fatal编程技术网

C++ 如何在c++;? 这越来越烦人了

C++ 如何在c++;? 这越来越烦人了,c++,initialization,declaration,C++,Initialization,Declaration,我花了足够长的时间试图解决这个问题,但我不得不问你如何解决这个问题,因为我已经没有任何想法了 #include <iostream> #include <cstdarg> using namespace std; void add(const int &number, ...) { double sum = 0.0; va_list list; va_start(list, number); for (int i = 0; i

我花了足够长的时间试图解决这个问题,但我不得不问你如何解决这个问题,因为我已经没有任何想法了

#include <iostream>
#include <cstdarg>

using namespace std;

void add(const int &number, ...)
{
    double sum = 0.0;
    va_list list;

    va_start(list, number);
    for (int i = 0; i < number; i++)
        sum += va_arg(list, double);

    va_end(liste);

    cout << "Sum: " << sum << endl;
}

int main()
{
    add(12, 12);
}
#包括
#包括
使用名称空间std;
无效添加(常量整数和数字,…)
{
双和=0.0;
va_列表;
va_开始(列表、编号);
for(int i=0;icout在您的版本中,您应该首先将参数数作为整数值传递,然后传递
double
值(因为您将它们解释为
double
)。在您的示例中,传递
int
并解释为
double
会导致未定义的行为。以下是固定版本:

#include <iostream>
#include <cstdarg>

void add(int count, ...) 
{
    double sum = 0.0;
    std::va_list args;
    va_start(args, count);
    for (int i = 0; i < count; ++i) {
        sum += va_arg(args, double);
    }
    va_end(args);

    std::cout << sum << '\n';
}

int main() 
{
    add(4, 25.0, 25.0, 25.0, 25.0);
}

在您的版本中,您应该首先将参数数作为整数值传递,然后传递
double
值(因为您将它们解释为
double
)。在您的示例中,传递
int
并解释为
double
会导致未定义的行为。以下是固定版本:

#include <iostream>
#include <cstdarg>

void add(int count, ...) 
{
    double sum = 0.0;
    std::va_list args;
    va_start(args, count);
    for (int i = 0; i < count; ++i) {
        sum += va_arg(args, double);
    }
    va_end(args);

    std::cout << sum << '\n';
}

int main() 
{
    add(4, 25.0, 25.0, 25.0, 25.0);
}

这是否回答了您的问题?主要问题是您使用两个整数值调用
add
函数。更具体地说,是两个
int
值。我不知道有哪个系统
sizeof(int)==sizeof(double)
,这意味着您将在
添加
功能中有未定义的行为。在此处使用之前,
列表
不会进行复制。在
va_end(liste)中有输入错误;
但是传递的参数和类型与提取的值不匹配。这回答了您的问题吗?主要问题是您使用两个整数值调用
add
函数。更具体地说,是两个
int
值。我不知道任何系统
sizeof(int)==sizeof(double)
,这意味着您将在
add
函数中有未定义的行为。在此处使用之前,
list
不会进行复制,而是在这里进行初始化(或填充)。尽管
va_end(liste);
中存在键入错误,并且传递的参数类型与提取的值不匹配。