0

我尝试通过引用返回多个值。

enum Color {ORANGE, YELLOW, GREEN, BLUE, VIOLET, RED};
int main(int argc, const char * argv[])
{
    CvScalar hsv_min, hsv_max;
    choose_color(RED, hsv_min, hsv_max);

    return 0;
}

void choose_color(Color farbe, CvScalar &min, CvScalar &max) {
    switch (farbe) {
        case ORANGE:
            min = cvScalar(0,50,50);
            max = cvScalar(0,255,255);
            break;
        default:
            throw "choose color: invalid case!";
            break;
    }
 };

为什么我会为 choose_color 调用“使用未声明的标识符”?

4

2 回答 2

2

因为您的main功能需要知道您的choose_color存在。

您需要进行前向声明(将函数的原型放在函数之前main):

enum Color {ORANGE, YELLOW, GREEN, BLUE, VIOLET, RED};

// Forward declaration
void choose_color(Color farbe, CvScalar &min, CvScalar &max); // function prototype

int main(int argc, const char * argv[])
{
    CvScalar hsv_min, hsv_max;
    choose_color(RED, hsv_min, hsv_max);

    return 0;
}

void choose_color(Color farbe, CvScalar &min, CvScalar &max) {
// ...
};

是关于前向声明的很好的解释。

另一个解决方案是main在你的choose_color函数之后定义。

于 2013-09-10T18:27:42.730 回答
0

将 main()放在 choose_color()之后,或者更好的是,在 main() 上方声明函数:

void choose_color(Color farbe, CvScalar &min, CvScalar &max);
int main(int argc, const char * argv[])
{
...
}
于 2013-09-10T18:26:56.927 回答