2013-10-25 62 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

相关问题