定义命名空间内类的构造函数
Define constructor of a class inside a namespace
我对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
{
}
如果这些信息杂乱无章,难以阅读,或者完全没有帮助,我很抱歉。 我已经阅读了我的教科书并在谷歌上搜索错误几个小时,非常感谢一些见解。谢谢。
破译你要找的东西有点困难,因为你的堆栈类不是一个堆栈。也就是说,为了让它在没有警告的情况下编译,您必须在构造函数初始值设定项列表中初始化您的empty
类成员,因为您已将其声明为 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;
}
然后创建类的对象(通过 no-arg 构造函数)将打印 HELLO
bill::myStackClass stk; //--> prints HELLO
我还应该注意,使用统一初始值设定项(大括号)是 C++11 功能,因此根据您的编译器,您可能需要提供一个额外的标志(即 -std=c++11)
如果您已经在方法定义(在您发布的代码中,您是)的预待处理bill::
,则无需说明using namespace bill
。using namespace bill
使得在解析标识符名称时搜索bill
命名空间,但如果明确声明它们在 bill
命名空间中计费(通过 bill::
),则不需要这样做。
的默认范围如果是私有的,因此将类成员的第一部分指定为私有是多余的。
相关文章:
- 在命名空间中定义函数还是限定函数
- CUDA内核和数学函数的显式命名空间
- 在命名空间中使用全局命名空间中的函数
- 是否可以将函数导入命名空间,但不能导出它?
- 不命名构造函数和析构函数上的类型错误
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 使用另一个命名空间中的函数C++
- 用于创建命名构造函数的宏
- Visual Studio 无法解决类和命名空间中重载的明确函数
- 命名空间更改函数定义
- C++命名空间中调用 void 函数的错误
- C++ 17 个友元函数声明和内联命名空间
- MFC 函数来自 :: 命名空间?
- 在命名空间内使用函数的循环包含
- 如何通过 boost::p ython 重命名构造函数的关键字参数
- 定义命名空间内类的构造函数
- 给构造函数命名有什么意义
- 为什么我不能将命名空间放在父类构造函数调用中?
- c++ python构造函数类型错误(可能的命名空间问题)
- 在不同的命名空间中调用别名声明的基类构造函数