#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;" 문제? 때로는 헤더 파일이 서로 의존하여 "따르기 힘듭니다"또는 복잡한 포함 물을 포함 할 수 있습니다 ... 항상 사용하는 복잡한 회귀 식을 다루는 "편도"기술이 있습니까?C++ : 이상한 헤더 오류가 나타납니다.
편집 :
실제 문제와 일치하도록 코드를 변경했습니다. 위의 코드를 보면 컴파일러는 'OpenCLDevice가이 범위에서 선언되지 않았습니다'라고 말합니다.
편집 :
내가 마지막으로 작동하는 코드를 가지고,이 내가 무슨 짓을 : 1. 추가 #INCLUDE "OpenCLDevice.h을"OpenCLPlatform.h 2. 3. 제거의 #include 컴파일 "OpenCLDevice.h"in OpenCLPlatform.h 4. 컴파일 이제 작동합니다!
편집 :
나는 프로젝트를 청소하고 모든 종속성을 제거하고 다시 같은 오류를 받고 있어요.
편집 :
저는 컴파일러가 코드에 뭔가를했다고 생각합니다. 헤더 및 소스 파일에서 사용되지 않지만 다른 헤더 및 소스 코드에서 사용되는 라이브러리를 포함하지 않기로 선택했을 수도 있습니다.