#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.コンパイルします今動作します!
編集:
プロジェクトをクリーンアップしてすべての依存関係を削除しましたが、同じエラーが再び発生します。
編集:
コンパイラがコードに何かをしたと思います。ヘッダーとソースファイルでは使用されていないが、他のヘッダーとソースコードでは使用されているライブラリを含めないことを選択した可能性があります