首先,我的老师要求我做类似的事情。
我有一类二维数组:
#pragma once
#include <iostream>
#include "MyMaskedMassiv.h"
template<typename T>
class MyMaskedMassiv;
template <typename T>
class My2dMassiv{
private:
T* mas;
int col;
int str;
public:
........
friend class MyMaskedMassiv<T>;
MyMaskedMassiv<T>& operator()(My2dMassiv<bool>& mask){
MyMaskedMassiv<T> *maskMas = new MyMaskedMassiv<T>();
maskMas->masiv = this;
maskMas->mask = &mask;
return *maskMas;
}
}
您会看到另一个类“ MyMaskedMassiv”,它具有第一个类的链接:
#pragma once
#include "My2dMassiv.h"
template <typename U>
class My2dMassiv;
template <typename T>
class MyMaskedMassiv{
private:
My2dMassiv<T> *masiv;
My2dMassiv<bool> *mask;
public:
friend class My2dMassiv<T>;
friend class My2dMassiv<bool>;
MyMaskedMassiv(){
masiv = nullptr;
mask = nullptr;
}
MyMaskedMassiv& operator=(const T& el){
int s = masiv->str;
int c = masiv->col;
for(int i=0; i<c; i++)
for( int j=0; j<s; j++)
if( this->mask->mas[i*s + j] == true)
this->masiv->mas[i*s + j] = el;
return *this;
}
}
因此,我尝试构建时出现错误:
My2dMassiv.h:11:8: error: ‘bool* My2dMassiv<bool>::mas’ is private
../src/myproject/MyMaskedMassiv.h:27:36: error: within this context
if( this->mask->mas[i*s + j] == true)
那么..我在做什么错了?
如果您想查看完整的代码,请在此处查看:GIT
答案 0 :(得分:0)
使用
template <typename T>
class My2dMassiv{
friend class MyMaskedMassiv<T>;
// ...
};
友谊仅用于匹配T
,我的意思是MyMaskedMassiv<int>
可以使用My2dMassiv<int>
的私人成员,而不能使用My2dMassiv<char>
的私人成员。
你想要
template <typename T>
class My2dMassiv{
template <typename U>
friend class MyMaskedMassiv;
// ...
};