繁体   English   中英

重载时未在C ++中的范围错误中声明

[英]not declared in scope error in c++ when overloading

尝试运行此代码时出现错误

In function 'int main()':
error: 'area' was not declared in this scope

我找不到解决该问题的明确方法。

#include <iostream>

using namespace std;

int main() {

    area(13.3, 67.4);

    return 0;
}

void area(int a, int b){
    cout << "The area is " << a * b << endl;
}

void area(float a, float b){
    cout << "The area is " << a * b << endl;
}

void area(double a, double b){
    cout << "The area is " << a * b << endl;
}

您需要先声明函数,然后才能使用它们。

要么向前声明它们:

#include <iostream>

using namespace std;

// forward declarations
void area(int a, int b);
void area(float a, float b);
void area(double a, double b);

int main() {
    area(13.3, 67.4);
    return 0;
}

void area(int a, int b){
    cout << "The area is " << a * b << endl;
}

void area(float a, float b){
    cout << "The area is " << a * b << endl;
}

void area(double a, double b){
    cout << "The area is " << a * b << endl;
}

否则,将实现移到main()上方:

#include <iostream>

using namespace std;

void area(int a, int b){
    cout << "The area is " << a * b << endl;
}

void area(float a, float b){
    cout << "The area is " << a * b << endl;
}

void area(double a, double b){
    cout << "The area is " << a * b << endl;
}

int main() {
    area(13.3, 67.4);
    return 0;
}

话虽这么说,由于实现完全相同,只是数据类型不同,因此请考虑使用单个模板化函数:

#include <iostream>

using namespace std;

template<typename T>
void area(T a, T b){
    cout << "The area is " << a * b << endl;
}

int main() {
    area<double>(13.3, 67.4);
    return 0;
}

将函数原型放在主要函数之上,您应该会很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM