其他头文件中的类

Classes in other header files?

本文关键字:文件 其他      更新时间:2023-10-16

我在另一个 .h 中有一个类,.cpp我的主文件.cpp。

在主要.cpp:

#include <iostream>
#include "filestuff.h"
#include "stream.h" <-- right here
int main(int argc, char** args)
{
    if(!args[1])
        return 0;
    u64 filesize = 0;
    get_file_size(args[1], &filesize);
    u8* fd = new u8[filesize];
    read_file(args[1], fd, filesize);
    Stream s = new Stream(fd, filesize, "rb", BigEndian );
    getchar();
    return 0;
}

在流中。

#include <iostream> //just in case?
#if defined(_WIN32) && defined(_MSC_VER)
    typedef __int64 s64;
    typedef unsigned __int64 u64;
#else
    typedef long long int s64;
    typedef unsigned long long int u64;
#endif
typedef unsigned long int u32;
typedef signed long int s32;
typedef unsigned short int u16;
typedef signed short int s16;
typedef unsigned char u8;
typedef signed char s8;
#define LittleEndian 0x1
#define BigEndian 0x2
class Stream
{
public:
    Stream(u8* buffer, u64 length, char* access, int IOType);
private:
    u8* buffer;
    u64 pos;
    u64 len;
};

在流中.cpp

#include "stream.h"
Stream::Stream(u8* buffer, u64 length, char* access, int IOType)
{
    u8* buf = new u8[length];
    buffer = buf;
}

如何使用以下代码来初始化我的类,就像我现在想在main中所做的那样?

Stream* s = new Stream(fd, filesize, "rb", BigEndian );

真正的错误在#define LittleEndian = 0x1。删除=

你在这里有一个错误:

Stream *s = new Stream(fd, filesize, "rb", BigEndian );
//     ^

运算符new返回指向新分配的存储空间的指针。因此,s必须成为使其工作的指针。

你应该有一个析构函数。您正在使用new[]分配动态内存,您应该在离开之前释放它:

Stream::~Stream()
{
    if ( NULL != buffer )
    {
        delete [] buffer;
    }
}

当您不再需要s时:

delete s;

最后一个错误 :

#define LittleEndian = 0x1
//                   ^

删除=

在C++中,使用static const变量是一种更好的做法:

static const int LittleEndian = 0x1;

看看这个:静态常量与 #define

编辑: 对于构造函数:

Stream::Stream(u64 iLength, char* iAccess, int iIOType):
    mBuffer( new u8[iLength] )
{
}
// With mBuffer member of the Stream class.

有两个可能的错误。如果你想要一个指向对象的指针,写

Stream *s = new Stream(fd, filesize, "rb", BigEndian );

如果你想要一个对象本身而不是一个指针,写

Stream s(fd, filesize, "rb", BigEndian );
如果你

使用动态分配,在你的主您必须替换

     Stream s = new Stream(fd, filesize, "rb", BigEndian );

      Stream* s = new Stream(fd, filesize, "rb", BigEndian );

所以 s 成为 Stream 对象上的指针。对流类函数的所有调用都应使用 s-> 或 (*s( 完成。

并且不要忘记删除您的记忆

 delete s;
到目前为止指出

了很多错误。这是另一个:在你的构造函数中,你设置

buffer = buf

这实际上并没有分配给Streambuffer成员。这将分配给构造函数的buffer参数。你最有可能想要

this->buffer = buf

也就是说,我不太确定为什么您将缓冲区作为参数,只是为了分配不同的缓冲区。也许当你完成代码时它会有意义。