其他头文件中的类
Classes in other header files?
我在另一个 .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
这实际上并没有分配给Stream
的buffer
成员。这将分配给构造函数的buffer
参数。你最有可能想要
this->buffer = buf
也就是说,我不太确定为什么您将缓冲区作为参数,只是为了分配不同的缓冲区。也许当你完成代码时它会有意义。
相关文章:
- 在其他文件中创建类时在 c++ 项目中不起作用
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 如何在其他文件中使用函数
- C++ - 忽略并从其他文件获取数据
- CMake:在其他目录中找不到我的头文件
- 无法使用 CMake 从其他文件夹添加源文件
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- 从文件中查找单词并替换到其他文件中
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 没有头文件如何使用c ++调用其他模块中的函数?
- 访问从 CPP 文件到其他头文件的静态变量
- 不能在其他文件中包含结构
- 无法打开包含文件'Graphics.hpp'没有这样的文件或目录,Visual Studio的其他包含不起作用
- 如何在 Linux 下使用 c++ 知道文件是否被其他进程使用?
- 使用函数打开文件,然后让其他函数利用该文件?
- 如何使用Winforms C#或C++.Net在不更改文件中其他内容的情况下修改jpg文件中的Orientation e
- 如何调试visual studio 2017生成的C++代码.android中的SO文件和其他第三方库
- 如何使用QXmlStreamReader解析包含对其他XML文件的引用的XML文件
- 如何在不受其他文件影响的情况下"by itself" Visual Studio 项目中运行C++文件?
- 如何将 cpp 文件中的静态函数公开给其他文件