在朋友 class 中使用模板
Using Template in friend class
首先,我的老师让我做那样的事情。
我有一个class的二维数组:
#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;
}
}
你可以看到另一个 class "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
有
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;
// ...
};
首先,我的老师让我做那样的事情。
我有一个class的二维数组:
#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;
}
}
你可以看到另一个 class "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
有
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;
// ...
};