如何在c ++的主类中创建模块?

时间:2015-01-28 16:29:38

标签: c++ module scope

我遇到了一个很大的问题,可能是一个新手问题。我的问题是我得到的错误是该方法未在此范围内创建,但事实确实如此。

int main() { //beggining main
  int n;
  int m;
  int result =0;
  cout << "Dime m en (m sobre n)" << endl;
  cin >> m;
  cout << "Dime n:" << endl;
  cin >> n; 
  result = calculate(m,n);
  cout << result << endl;
  return 0;
} //finish main

int calculate(int m, int n){ //begin calculate
  return m+n;
} //finish calculate

当我构建项目时,我在结果= calculate(m,n)中未在此范围内声明'calculate';线;

这可能是一件愚蠢的事,但为什么我会收到此错误?非常感谢

3 个答案:

答案 0 :(得分:1)

按照以下方式向前宣布您的calculate功能:

int calculate(int m, int n);

int main() { //beginning main
    int n;
    int m;
    int result =0;
    cout << "Dime m en (m sobre n)" << endl;
    cin >> m;
    cout << "Dime n:" << endl;

    cin >> n;
    result = calculate(m,n);
    cout << result << endl;
    return 0;
} //finish main

int calculate(int m, int n){ //begin calculate
    return m+n;
}

你必须这样做的原因是因为在C和C ++中,编译器在遇到calculate()调用时并不知道你的函数是否存在。 有两种方法可以避免此行为产生的错误:要么在main之前定义整个函数及其正文,那么编译器在看到calculate()时就会知道所有内容。调用,或者您只是使用名为 prototype 的函数声明函数,该函数声明函数的名称,参数类型和返回类型,然后稍后定义函数体。这里的代码采用后一种方法。

答案 1 :(得分:1)

为什么会出现此错误?

编译器只知道已声明的内容。在遇到声明时

result = calculate(m,n);

在你的int main()函数中,它没有遇到符合用法的calculate声明(或者在这种情况下的任何声明),因此你的程序有问题。

因此,您必须在之前告诉编译器您的函数calculate() 。这可以通过在calculate()的前面移动main()的定义,或者仅仅添加一个声明,告诉编译器这样的函数存在,并在稍后提供它的主体,如

int calculate(int, int);      // make this function known to the compiler

int main() {
    /* ... */
    result = calculate(m,n);  // okay: function is known
    /* ... */
}

int calculate(int n, int m)   // provide full function definition
{
    /* ... */
    return result;
}

这里,calculate()的声明可能在另一个文件(一个头文件,比如calculate.h)中,另一个文件中的calculate()的完整定义(源文件,比如说) ,calculate.cc)。在后一种情况下,您必须确保加载程序找到从main()调用的正确函数,即您必须将目标文件链接在一起。

答案 2 :(得分:1)

编译器只能解析在给定点熟悉的名称。需要解决对calculate()的调用的问题是在代码中提及它之前,因此编译器此时并不熟悉它。

要解决此问题,您需要在之前(代码中)声明calculate()您调用它的函数,这是您的main()函数。

通过以下任一方式完成此任务:

  1. 移动calculate()的整个定义,使其高于您的main() - 可以位于相同的.cpp文件或包含的头文件中。

  2. 或者,只需在calculate()之上的某处声明main() - 可以在同一个.cpp文件或包含的头文件中 - 并将定义保留在现在的位置。< / p>