我創建了一個類並將其對象傳遞給了cuda內核。訪問cuda內核中的類的私有成員
內核的代碼是:
__global__ void kernel(pt *p,int n)
{
int id=blockDim.x*blockIdx.x+threadIdx.x;
if(id<n)
{
p[id]=p[id]*p[id];
}}
而且它提供了以下錯誤:error: ‘int pt::a’ is private
的問題是: 如何訪問類的私有成員?
程序,如果沒有私有成員類的
class pt{
int a,b;
public:
pt(){}
pt(int x,int y)
{
a=x;
b=y;
}
friend ostream& operator<<(ostream &out,pt p)
{
out<<"("<<p.a<<","<<p.b<<")\n";
return out;
}
int get_a()
{
return this->a;
}
int get_b()
{
return this->b;
}
__host__ __device__ pt operator*(pt p)
{
pt temp;
temp.a=a*p.a;
temp.b=b*p.b;
return temp;
}
pt operator[](pt p)
{
pt temp;
temp.a=p.a;
temp.b=p.b;
return temp;
}
void set_a(int p)
{
a=p;
}
void set_b(int p)
{
b=p;
}};
什麼是'pt'的定義是什麼? – 2011-05-17 08:48:15
看來你的函數被聲明爲類定義之外的朋友。 class pt的定義是什麼?除非朋友函數是在類定義中聲明的,否則它不是該類的朋友。 – harrism 2011-05-18 03:31:58