2011-09-05 43 views
1

下面的程序是示值誤差:爲什麼這個C++程序使用構造函數和析構函數顯示錯誤?

#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; 
} 

Line 11: error: reference to 'count' is ambiguous compilation terminated due to -Wfatal-errors.

+0

這不應該編譯可言,沒有這樣的標題'iostream.h'和你不'使用命名空間std ;'但是你正在使用'cout'等等。你還在'main'後面缺少'()'。 –

+2

看起來像C代碼中的一個類..如果可能的話,不要使用全局變量..靜態類成員與count變量具有相同的效果。 – duedl0r

+0

你使用什麼編譯器? –

回答

9

標準C++中沒有頭文件<iostream.h>。使用標題爲<iostream>的名稱爲std名稱空間,因此不會污染名稱爲count的全局名稱空間。 從現在開始,不要忘了使用std::cinstd::cout等。

如果您的編譯器無法識別<iostream>,請將其丟棄並獲取一個新的。舉個例子,Visual Studio Express是免費且易於使用的,雖然目前還不是非常符合標準,但這對您來說不應該是一個大問題。

+0

你可以在[C++ tag wiki](http://stackoverflow.com/tags/c%2b%2b/info)上找到其他的選擇。 –

0

試着稍微改變您的計數變量的名稱。我認爲「計數」在流中可能有特殊意義。

+0

應該不是問題;它將通過命名空間解決。 –

5

你有幾個問題與您的代碼:

  1. 你不需要conio.h
  2. 沒有所謂iostream.h沒有這樣的標題,它只是iostream
  3. 你字後失蹤的()main
  4. 當他們不在您所在的命名空間中時,您正在使用cout,endl等。

修復所有的錯誤後,你會得到這樣的事情:

#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; 
} 
相關問題