#ifndef _MY_OPENCLPLATFORM_
#define _MY_OPENCLPLATFORM_
#include "OpenCL.h"
namespace my
{
class OpenCLPlatform
{
cl_platform_id mplatformID;
cl_uint mnumDevices;
std::vector<OpenCLDevice> mdevices; // OpenCLDevice was not declared in this scope
public:
OpenCLPlatform(cl_platform_id platformID);
void getDevices();
void printInfo();
cl_platform_id& getPlatformID();
};
}
#endif
#ifndef _MY_OPENCLDEVICE_
#define _MY_OPENCLDEVICE_
#include "OpenCL.h"
namespace my
{
class OpenCLDevice
{
cl_device_id mdeviceID;
public:
OpenCLDevice(cl_device_id device);
void printInfo();
void printDeviceType(cl_device_type deviceType);
};
}
#endif
#ifndef _MY_OPENCL_
#define _MY_OPENCL_
#if defined(__APPLE__) || defined(MACOSX)
#include <OpenCL/opencl.h> // This works only for XCODE compiler
#else
#include <CL/cl.h>
#endif
#include <cassert>
#include <iostream>
#include <vector>
#include "Exception.h"
#include "OpenCLDevice.h"
#include "OpenCLPlatform.h"
namespace my {
class OpenCLDevice;
class OpenCLPlatform;
class OpenCL;
class OpenCL
{
cl_uint mnumPlatforms;
std::vector<OpenCLPlatform> mplatforms;
void getPlatforms();
public:
OpenCL();
~OpenCL();
void quickSetup();
void printPlatformVersions();
};
}
#endif
是否排序“ OpenCLDevice类; OpenCLPlatform类; OpenCL类”?物?有时,头文件相互依赖,这可能导致“难以遵循”或令人费解的内含物...您是否有“单向”技术来处理一直使用的令人费解的内含物?
编辑:
我更改了代码以匹配我的实际问题。如果您看上面的代码,编译器会说“在此范围内未声明OpenCLDevice”。
编辑:
我终于使代码工作了,这就是我所做的:
1.在OpenCLPlatform.h中添加#include“ OpenCLDevice.h”
2.编译
3.在OpenCLPlatform.h中删除#include“ OpenCLDevice.h”
4.编译
现在可以使用!
编辑:
我清理了项目并删除了所有依赖项,并且再次遇到相同的错误。
编辑:
我认为编译器对代码做了什么。它可能选择不包含未在头文件和源文件中使用但在其他头文件和源代码中使用的库
最佳答案
由于您包括了(大概)定义了两个类的classa.h和classb.h,因此您甚至不需要前向声明。
但是,如果您不包括它们,那么不,声明的顺序无关紧要。只要在使用该类之前对它进行了前向声明,就可以了。
关于c++ - C++:出现奇怪的 header 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10234786/