我的程序中'unsigned'之前的预期primary-expression(析构函数和构造函数问题)

时间:2015-11-26 09:47:40

标签: c++

您好我是c ​​++的新手,我制作了程序的骨架,我在构造函数和构造函数方面遇到了一些问题。

我的头.cpp:

#include <iostream>
#include "set_char.hpp"
using namespace std;

int main() 
{

    set_char *z1 = new set_char(unsigned char *zbior[]);
    delete z1;

    return 0;
};

我的set_char.hpp班级文件:

#define ROZMIAR_MAX 256
class set_char
{
    unsigned char zbior[ROZMIAR_MAX];

    public:

        set_char(unsigned char *zbior[]);
        ~set_char(unsigned char *zbior[]);

        int nalezy(unsigned char);
        int licznosc();

        void dodaj(unsigned char);
        void usun(unsigned char);

};

我的set_char.cpp文件:

#include "set_char.hpp"
#include <iostream>
#include <math.h>

using namespace std;

set_char(unsigned char *zbior[]);
~set_char(unsigned char *zbior[]);

void set_char::dodaj(unsigned char)
{

};

void set_char::usun(unsigned char)
{

};

int set_char::nalezy(unsigned char)
{   

};

int set_char::licznosc()
{

};

2 个答案:

答案 0 :(得分:1)

其中:

你不应该在析构函数中添加任何参数:

~set_char(unsigned char *zbior[]);
          ^^^^^^^^^^^^^^^^^^^^^^ --- remove it

创建set_char时,您应该提供指向数组的指针,而不是实际的参数类型:

set_char *z1 = new set_char(unsigned char *zbior[]);
                            ^^^^^^^^^^^^^^^^^^^^^^

答案 1 :(得分:0)

1

您没有定义ConstructorDestructor

您在set_char.hpp

中宣布了这两项规定
set_char(unsigned char *zbior[]);
~set_char(unsigned char *zbior[]);

然而,在set_char.cpp中,您再次声明它们而没有返回类型。在Constructor之外定义Destructorclass是非法的。您的编译器认为它们是functions并搜索返回类型。

2

Destructor可能没有任何参数。

3

如果您在FunctionConstructorDestructor中使用括号'[]'将数组定义为参数,则它可能不具有可变长度,因此它必须是定义。如果它的长度可变,则必须将其省略。

4

您使用以下方法以错误的方式调用构造函数:

new set_char(unsigned char *zbior[]);

你已经声明了它需要什么参数,所以把它交给参数。例如,null pointer

set_char.hpp中执行此操作的正确方法:

set_char(unsigned char *);
~set_char();

set_char.cpp中执行此操作的正确方法:

set_char::set_char(unsigned char *zbior)
{
    //Your definition
}

set_char::~set_char();
{
    //Your definition
}

head.cpp中执行此操作的正确方法:

set_char *z1 = new set_char(0x0);

另外注意,通常使用define宏来定义常量,是C方式。在C++中,它通常用:

完成
static const size_t ROZMIAR_MAX 256;

第二个侧面说明。如果您拥有常量/函数以及namespace

中定义的内容,则将其视为“更整洁”的代码