在我的程序中"无符号"之前的预期主表达式(析构函数和构造函数问题)

expected primary-expression before 'unsigned' in my program (destructors and constructors problems)

本文关键字:表达式 析构函数 问题 构造函数 程序 我的 无符号      更新时间:2023-10-16

嗨,我是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()
{
};

其中:

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

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

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

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

1

您没有定义您的ConstructorDestructor

您在set_char.hpp 中声明了这两个

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

但是,在set_char.cpp中,您可以在没有返回类型的情况下再次声明它们。在class之外定义ConstructorDestructor是非法的。编译器认为它们是functions,并搜索返回类型。

2

CCD_ 11可以不具有任何自变量。

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 中定义了常量/函数等,则认为它是"更整洁"的代码