【发布时间】:2018-10-04 04:18:51
【问题描述】:
首先,我的老师要求我做这样的事情。
我有一类二维数组:
#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
【问题讨论】:
-
My2dMassiv<bool>将被实例化为T=bool,这意味着friend class MyMaskedMassiv<T>;将变为friend class MyMaskedMassiv<bool>;,这只有在MyMaskedMassiv<T>专门围绕T= 时才有用bool.