【问题标题】:Why is my HelloWorld function not declared in this scope?为什么我的 HelloWorld 函数没有在这个范围内声明?
【发布时间】:2012-01-04 06:57:56
【问题描述】:
#include <iostream>

using namespace std;

int main()
{
    HelloWorld();
    return 0;
}

void HelloWorld()
{
    cout << "Hello, World" << endl;
}

我在使用 g++ 时遇到以下编译错误:

l1.cpp: In function 'int main()':
l1.cpp:5:15: error: 'HelloWorld' was not declared in this scope

【问题讨论】:

标签: c++ scope


【解决方案1】:

您需要先声明或定义函数,然后才能使用它。否则,它不知道HelloWorld() 作为函数存在。

在你的主要功能之前添加这个:

void HelloWorld();

或者,您可以将HelloWorld() 的定义移到main() 之前:

#include <iostream>
using namespace std;

void HelloWorld()
{
  cout << "Hello, World" << endl;
}

int main()
{
  HelloWorld();
  return 0;
}

【讨论】:

    【解决方案2】:

    您必须先声明该函数,然后才能使用它:

    #include <iostream>
    
    using namespace std;
    
    void HelloWorld();
    
    int main()
    {
        HelloWorld();
        return 0;
    }
    
    void HelloWorld()
    {
        cout << "Hello, World" << endl;
    }
    

    或者你可以将HelloWorld()的定义移到main()之前

    【讨论】:

    • 但您可以在声明类成员之前使用它。所以这个解释并不令人满意。
    • @Walter 我的解释具体涵盖了他的问题,而且由于他是新来的,没有必要向他提供这么多信息。
    【解决方案3】:

    您需要转发声明HelloWorld(),以便main 知道它是什么。像这样:

    #include <iostream>
    using namespace std;
    void HelloWorld();
    int main()
    {
      HelloWorld();
      return 0;
    }
    void HelloWorld()
    {
      cout << "Hello, World" << endl;
    }
    

    【讨论】:

      【解决方案4】:

      您需要在调用之前有函数的原型或在它之前有整个函数。

      所以第一个是:

      void HelloWorld();
      
      int main() {
        HelloWorld();
        return 0;
      }
      
      void HelloWorld() {
        cout << "Hello, World" << endl;
      }
      

      第二种方式是:

      void HelloWorld() {
        cout << "Hello, World" << endl;
      }
      
      int main() {
        HelloWorld();
        return 0;
      }
      

      【讨论】:

        【解决方案5】:

        由于某种原因没有人提到,还有一种可能性,即使用 extern 声明:

        #include <iostream>
        using namespace std;
        int main()
        {
          extern void HelloWorld();
          HelloWorld();
          return 0;
        }
        void HelloWorld()
        {
          cout << "Hello, World" << endl;
        }
        

        当您不想将函数的名称引入命名空间范围时,这是更可取的。

        【讨论】:

          【解决方案6】:

          所有这些答案都是正确的,但奇怪的是,这会奏效:

          struct Hello {
            static int main() { World(); return 0; } /* note: World() not declared yet */
            static void World() { std::cout<<"Hello World"; }
          };
          int main() { return Hello::main(); } 
          

          【讨论】:

          • 没什么奇怪的,类的所有成员都已经在成员函数体内定义了。
          • @Gene 这不是很明显(无论如何对于初学者/局外人来说)为什么在namespace X { int a() { return b;} int b; } 中我们有问题,但如果我们将namespace 替换为class(并添加;最后)。
          【解决方案7】:

          你必须把函数放在主函数之前。

          【讨论】:

            【解决方案8】:

            在 C++ 中,您需要在调用函数之前定义或至少声明函数。

            到目前为止,您正在尝试做的事情是这样的:

            int main()
            {
               cout << b;
               int b = 10;
            }
            

            所以你也可以这样尝试:

            #include <iostream>
            using namespace std;  
            
            void HelloWorld();
            
            int main()  
            {
                HelloWorld();
                return 0;  
            }
            void HelloWorld()
            {
              cout << "Hello, World" << endl;  
            } 
            

            在 C++ 中,在主函数之前定义所有其他函数是一种很好的做法。

            【讨论】:

              【解决方案9】:

              重新排列HelloWorld(),使其出现在main()之前:

              #include <iostream>
              using namespace std;
              void HelloWorld()
              {
                  cout << "Hello, World" << endl;
              }
              int main()
              {
                  HelloWorld();
                  return 0;
              }
              

              【讨论】:

                【解决方案10】:

                如果你定义你在你的主函数下面运行,你应该首先在上面声明它。

                #include<iostream>
                using namespace std;
                void HelloWorld();
                int main()  
                {
                    HelloWorld();
                    return 0;  
                }
                void HelloWorld()
                {
                  cout << "Hello, World" << endl;  
                } 
                

                【讨论】:

                  猜你喜欢
                  • 2018-07-12
                  • 2015-10-03
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-08-27
                  • 1970-01-01
                  • 2015-09-22
                  • 1970-01-01
                  相关资源
                  最近更新 更多