【问题标题】:expected constructor, destructor, or type conversion before '<<' token'<<' 标记之前的预期构造函数、析构函数或类型转换
【发布时间】:2011-08-11 19:00:39
【问题描述】:

关于使用 g++ 编译后续程序。

#include<iostream>
using namespace std;

cout<<"Before Main"<<endl;

int main()
{
cout<<"Within Main"<<endl;
}

错误:'

【问题讨论】:

标签: c++


【解决方案1】:

你不能在函数之外执行语句。

【讨论】:

  • 声明就是声明。它被执行(例如,执行初始化程序中的函数调用)。所以,字面上你的陈述是不正确的。但我明白你想表达什么。不幸的是,AFAIK,C++ 标准并没有给我们谈论这个的条件! :-(
【解决方案2】:

您不能将非声明语句放在命名空间范围内。

但是,表达式语句可以转换为声明,例如

bool const bah = (cout<<"Before Main"<<endl);

这通常不是一个好主意,但也许值得了解一下?

干杯,

【讨论】:

    【解决方案3】:

    如果不将其放在函数体中,则无法执行此类语句。如果你想要main()之前的东西,那么将它封装在一个全局结构中并定义一个对象。

    struct Print {
      Print() { cout<<"Before Main"<<endl; }
      ~Print() { cout<<"After Main"<<endl; }
    } print;                        // <--- declare/define object
    
    int main()
    {
      cout<<"Within Main"<<endl;
    }
    

    【讨论】:

      【解决方案4】:

      这是非法的,所有要执行的东西都必须在 main 函数中。当然你可以写第二个函数,把cout&lt;&lt;"Before Main"&lt;&lt;endl;放在那里,但是main会先执行。 你可以写:

      #include<iostream>
      using namespace std;
      void f() {
         cout<<"Before Main"<<endl;
      }
      
      int main()
      {
         f();
         cout<<"Within Main"<<endl;
      }
      

      但是 main 是第一个将被执行的函数。

      【讨论】:

      • (a) 是void; (b) “[要执行的]一切都必须在 [the] main 函数内”具有误导性; (c) “方法”在C++中没有很好的定义,甚至在C++之外它通常也表示“成员函数”,但在这里它不是成员函数。
      猜你喜欢
      • 2011-12-04
      • 2010-12-12
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多