我在main.cpp的另一个.h和.cpp文件中有一个类。
在main.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;
}
在Stream.h中
#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;
};
在Stream.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 );
答案 0 :(得分:6)
真正的错误在#define LittleEndian = 0x1
。删除=
。
答案 1 :(得分:2)
您在此处有错误:
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;
的
编辑: 对于构造函数:
Stream::Stream(u64 iLength, char* iAccess, int iIOType):
mBuffer( new u8[iLength] )
{
}
// With mBuffer member of the Stream class.
答案 2 :(得分:0)
有两个可能的错误。如果你想要一个指针到一个对象,写下
Stream *s = new Stream(fd, filesize, "rb", BigEndian );
如果你想要一个对象本身而不是指针,那就写
Stream s(fd, filesize, "rb", BigEndian );
答案 3 :(得分:0)
你必须替换
Stream s = new Stream(fd, filesize, "rb", BigEndian );
通过
Stream* s = new Stream(fd, filesize, "rb", BigEndian );
所以s成为Stream对象的指针。 所有对流类功能的调用都应该用:s-&gt;或(* s)。
并且不要忘记用
删除你的记忆 delete s;
答案 4 :(得分:0)
到目前为止,指出了很多错误。这是另一个:在你的构造函数中,你设置
buffer = buf
实际上并没有分配给Stream
的{{1}}成员。这将分配给构造函数的buffer
参数。你很可能想要
buffer
那就是说,我不确定为什么你把缓冲区作为一个参数,只是分配一个不同的。也许在你完成代码时它会有意义。