通过引用调用:使用未声明的标识符

时间:2013-09-10 18:24:15

标签: c++ opencv pass-by-reference

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

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调用获得“使用未声明的标识符”?

2 个答案:

答案 0 :(得分:2)

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

你需要做一个前向声明(在main函数之前放置函数的prototype):

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) {
// ...
};

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

另一种解决方案是在main函数后定义choose_color

答案 1 :(得分:0)

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

void choose_color(Color farbe, CvScalar &min, CvScalar &max);
int main(int argc, const char * argv[])
{
...
}