我对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 :(得分:-1)
要破译你正在寻找的东西有点困难,因为你的堆栈类不是很多堆栈。也就是说,只是为了让它在没有警告的情况下编译,你必须在构造函数初始化列表中初始化你的empty
类成员,因为你已经声明它是const。
e.g。如果您的构造函数为:
bill::myStackClass::myStackClass()
: i(0), empty {}
{}
bill::myStackClass::myStackClass(int[],int)
: empty{}
{}
这会将empty
char数组初始化为空。如果您希望它包含某些内容,那么您可以在大括号内指定它,例如
bill::myStackClass::myStackClass()
: i(0), empty {'H', 'E', 'L', 'L', 'O'}
{
std::cout << empty << std::endl;
}
然后创建类的对象(通过no-arg构造函数)将打印HELLO
bill::myStackClass stk; //--> prints HELLO
我还应该注意,使用统一初始化器(花括号)是C ++ 11的一个特性,因此根据你的编译器,你可能需要提供一个额外的标志(即-std = c ++) 11)
如果您已经预先挂起using namespace bill
您的方法定义(在您发布的代码中,您是),则无需说bill::
。 using namespace bill
使得在解析您的标识符名称时搜索bill
命名空间,但是如果您明确说明它们是bill
命名空间中的帐单(通过{{1} }),然后这不是必需的。
此外,如果是私有的类的默认作用域,那么将类成员的第一部分指定为私有是多余的。