Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.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++_Enums - Fatal编程技术网

是否将枚举类型作为参数传递?C++

是否将枚举类型作为参数传递?C++,c++,enums,C++,Enums,例如,我在一个函数中创建了一个枚举,并将它们保存在动物类型的数组中,在本例中只输入cow值,然后我想将该数组作为参数传递到function2中,我该怎么做 void function1() { enum animals{cow,cat,dog}; animals array[3]; for(int i=0;i<3;i++) { array[i]=cow; } function2(array); } void func

例如,我在一个函数中创建了一个枚举,并将它们保存在动物类型的数组中,在本例中只输入cow值,然后我想将该数组作为参数传递到function2中,我该怎么做

void function1()
{
    enum animals{cow,cat,dog};

    animals array[3];

    for(int i=0;i<3;i++)
    {
        array[i]=cow;
    }

    function2(array);
} 

void function2()
{
    // blablabla
}

您可以将数组强制转换为int数组并传入:

function2((int*)array);
但是函数2将不知道如何解码枚举。如果要跨多个函数使用枚举,则需要将其定义为全局函数或两个函数都可以看到的其他位置。

枚举定义必须对两个函数都可见。例如:

enum animals{cow,cat,dog};

template<size_t N>
void function2(animals (&foo)[N])
{
    cout << "Received " << N << " animals.\n";
}

void function1()
{
    animals array[3] = { cow, cow, cow };
    function2(array);
} 

例如,我在一个函数中创建一个枚举。。。您可能需要了解作用域以及如何使用参数删除和实现函数。要使您的动物类型在两个函数中都可用,它必须对两个函数都可见,这意味着它不能在其中任何一个函数中定义。另外,C++没有数组参数;传递一个指向第一个元素function2array的指针隐式执行此操作,这意味着您需要显式传递长度,或者使用容器类vector、array等。;我不知道哪一个最好。@Ben,这是个C问题;C++对int的选择更好的选择仍然是个坏主意。int类型和animals可能大小不同。而且您的描述仍然提到对数组类型进行强制转换。我建议删除这个答案的前两行;使枚举类型对两个函数都可见是唯一合理的解决方案。这会导致未定义behaviour@AnT您可以强制转换对数组类型的引用