为什么这个C ++程序使用构造函数和析构函数显示错误?

时间:2011-09-05 14:14:35

标签: c++ constructor destructor

以下程序显示错误:

#include<conio.h>
#include<iostream.h>
int count = 0;
class alpha
   {
   public:

   alpha()
         {
         count++;
         cout<<"\n Number of objects created "<<count; 
         }
  ~alpha()
         {
         cout<<"\n Number of object destroyed"<<count;
         count--;
         }
  };

int main
{
    cout<<" inside main ";
    alpha a1, a2, a3, a4;
    {
        cout<<"\n Block 1 ";
        alpha A5;
    }
    {
        cout<<"\n Block 2 ";
        alpha a6;
    }
    cout<<" main again ";
    return 0;
}
  

第11行:错误:由于-Wfatal-errors,对'count'的引用是模糊的编译终止。

3 个答案:

答案 0 :(得分:9)

标准C ++中没有标题<iostream.h>。使用名称在<iostream>命名空间中的标头std,因此不会污染名称为count的全局命名空间。 从现在开始不要忘记使用std::cinstd::cout等。

如果您的编译器无法识别<iostream>,请将其丢弃并获取新的编译器。 Visual Studio Express,其中之一,免费且易于使用,但目前并非符合标准,但对您来说这不应该是一个大问题。

答案 1 :(得分:5)

您的代码有几个问题:

  1. 您不需要conio.h
  2. 没有iostream.h这样的标题,它只是iostream
  3. 您在()
  4. 一词之后错过了main
  5. 当您不在您正在使用的名称空间中时,您正在使用coutendl等。
  6. 修正所有错误后,你会得到类似的结果:

    #include<iostream>
    
    using namespace std;
    
    int count = 0;
    
    class alpha
       {
    public:
    alpha()
           {
           count++;
           cout<<"\n Number of objects created "<<count; 
           }
    ~alpha()
           {
           cout<<"\n Number of object destroyed"<<count;
           count--;
           }
    };
    
    int main()
        {
        cout<<" inside main ";
        alpha a1, a2, a3, a4;
            {
            cout<<"\n Block 1 ";
            alpha A5;
            }
            {
            cout<<"\n Block 2 ";
            alpha a6;
            }
        cout<<" main again ";
        return 0;
    }
    

答案 2 :(得分:0)

尝试稍微更改计数变量的名称。我认为“count”在流中可能有特殊意义。