使用模板 类 c++ 的友元函数
friend function using template classes c++
我做了一个 class 它有一个友元函数,当我声明它时没有问题但是,当我写它的代码时它 returns 我的错误:
“'change' 的外联定义与 'MyClass ' 中的任何声明都不匹配”。
这是代码
template <class T>
class MyClass {
private:
T a;
public:
MyClass(T);
~MyClass();
friend void change(MyClass);
};
template <class T>
MyClass <T> :: MyClass(T value) {
a = value;
}
template <class T>
MyClass <T> :: ~MyClass() {}
template <class T>
void MyClass <T> :: change(MyClass class) { //Out-of-line definition of 'change' does not match any declaration in 'MyClass <T>'
a = class.a;
}
friend void change(MyClass);
没有声明MyClass
的成员函数,是编译器授予自由函数¹void change(MyClass);
访问[=37的指令=] MyClass
.
成员
您授予 MyClass
访问权限的免费功能必须是这样的:
template <class S>
void change(MyClass<S> obj) {
obj.a; // obj.a can be accessed by the free function
}
但是 friend
必须在 class 中以这种方式声明:
template <class T>
class MyClass {
private:
T a;
public:
MyClass(T);
~MyClass();
template <class S>
friend void change(MyClass<S>);
};
但基于 change
中的 a = class.a
,我认为你实际上想要这个:
template <class T>
class MyClass {
private:
T a;
public:
MyClass(T);
~MyClass();
void change(MyClass);
};
template <class T>
MyClass <T> :: MyClass(T value) {
a = value;
}
template <class T>
MyClass <T> :: ~MyClass() {}
template <class T>
void MyClass <T>::change(MyClass class) {
a = class.a;
}
MyClass
的成员函数始终可以访问 MyClass
的任何实例的所有成员。
1: What is the meaning of the term “free function” in C++?
我做了一个 class 它有一个友元函数,当我声明它时没有问题但是,当我写它的代码时它 returns 我的错误:
“'change' 的外联定义与 'MyClass ' 中的任何声明都不匹配”。
这是代码
template <class T>
class MyClass {
private:
T a;
public:
MyClass(T);
~MyClass();
friend void change(MyClass);
};
template <class T>
MyClass <T> :: MyClass(T value) {
a = value;
}
template <class T>
MyClass <T> :: ~MyClass() {}
template <class T>
void MyClass <T> :: change(MyClass class) { //Out-of-line definition of 'change' does not match any declaration in 'MyClass <T>'
a = class.a;
}
friend void change(MyClass);
没有声明MyClass
的成员函数,是编译器授予自由函数¹void change(MyClass);
访问[=37的指令=] MyClass
.
您授予 MyClass
访问权限的免费功能必须是这样的:
template <class S>
void change(MyClass<S> obj) {
obj.a; // obj.a can be accessed by the free function
}
但是 friend
必须在 class 中以这种方式声明:
template <class T>
class MyClass {
private:
T a;
public:
MyClass(T);
~MyClass();
template <class S>
friend void change(MyClass<S>);
};
但基于 change
中的 a = class.a
,我认为你实际上想要这个:
template <class T>
class MyClass {
private:
T a;
public:
MyClass(T);
~MyClass();
void change(MyClass);
};
template <class T>
MyClass <T> :: MyClass(T value) {
a = value;
}
template <class T>
MyClass <T> :: ~MyClass() {}
template <class T>
void MyClass <T>::change(MyClass class) {
a = class.a;
}
MyClass
的成员函数始终可以访问 MyClass
的任何实例的所有成员。
1: What is the meaning of the term “free function” in C++?