2013-10-25 122 views
0

對於C++來說,我相當新,所以這可能很簡單。 我創建了一個名稱空間,並且在該名稱空間內是一個類。我無法弄清楚如何定義任何我的類的構造函數而不會收到錯誤。在名稱空間中定義一個類的構造函數

#include <iostream> 

namespace bill { 
    const char * null ="EMPTY"; 
    const int MAX_STACK_SIZE = 100; 
    class myStackClass { 
    private: 
     int i; 
    public: 
     myStackClass(); 
     myStackClass(int[], int); 
     int peek(); 
     int pop(); 
     int push(int insertMe); 
     const char empty[5]; 
    }; 
} 
using namespace bill; 
bill::myStackClass::myStackClass() //bill::myStackClass() doesn't work either 
    : 
    i(0) 
{ //error C2448: 'i' : function-style initializer appears to be a function definition 
} //"bill::myStackClass::myStackClass()" provides no initializer for: 
     const member "bill::myStackClass::empty" 


bill::myStackClass::myStackClass(int[],int) 
{ //error C2439: 'bill::myStackClass::empty' : member could not be initialized 
} //"bill::myStackClass::myStackClass(int *, int)" provides no initializer for: 
     const member "bill::myStackClass::empty" 

int bill::myStackClass::peek() // I am able to call methods belonging to the class 
{ 
} 

對不起,如果有任何信息混亂,難以閱讀或只是徹頭徹尾沒有幫助。我一直在閱讀我的教科書和谷歌搜索錯誤幾個小時,真的很感謝一些見解。謝謝。

回答

0

解密你要找的東西有點困難,因爲你的堆棧類不是很多。也就是說,爲了讓它在沒有警告的情況下編譯,您必須在構造函數初始化程序列表中初始化您的類成員,因爲您聲明它爲const。

例如如果你有你的構造爲:

bill::myStackClass::myStackClass() 
    : i(0), empty {} 
{} 

bill::myStackClass::myStackClass(int[],int) 
    : empty{} 
{} 

這將初始化empty字符數組是,嗯,是空的。如果你想讓它包含某些東西,那麼你可以在大括號內指定它,例如

bill::myStackClass::myStackClass() 
    : i(0), empty {'H', 'E', 'L', 'L', 'O'} 
{ 
    std::cout << empty << std::endl;           
} 

然後創建你的類的對象(通過無參數的構造函數)將打印HELLO

bill::myStackClass stk; //--> prints HELLO 

我也應該注意,在使用統一初始化的(在大括號)是一個C++ 11的功能,所以這取決於你的編譯器,你可能要提供一個額外的標誌(即-std = C++ 11)

你不需要說using namespace bill如果你已經預先待定bill::到您的方法定義(在您的發佈代碼中,y你是)。 using namespace bill使得在解析標識符名稱時搜索bill名稱空間,但是如果您明確指出它們是bill名稱空間(通過bill::)中的帳單,則不需要此名稱空間。

另外,如果某個類是私有的,那麼這個類的默認範圍就是這樣,因此將類成員的第一部分指定爲私有是多餘的。

+0

這只是我的程序的開始,所以可以解釋爲什麼它看起來不像堆棧。這個答案非常具有教育意義,我更加了解命名空間,但是我仍然收到錯誤,無法編譯。如果在初始化列表中聲明瞭數組'empty {}',我的編譯器就期待'('和其他2個括號之間的正文將在它期望的聲明之後。 – user2921678

+0

您使用什麼編譯器? – alrikai

+0

Microsoft Visual Studio 2012 C++編譯器 – user2921678

相關問題