模板类有这个问题。我想用另一个类作为具有不同类型的参数来构造一个构造函数,但是每次我尝试初始化类的属性时,我都会得到它是私有的错误而我无法访问它。 我将不胜感激任何帮助。
以下是简单的代码:
template <typename Type>
class SomeClass {
Type p;
public:
SomeClass(Type x) { p = x; }
template <typename Type2>
SomeClass(SomeClass<Type2> k) { p = k.p; }
Type GetP() { return p; }
};
int main()
{
SomeClass<double> c(2.4);
SomeClass<int> c1(c);
std::cout << c1.GetP() << std::endl;
return 0;
}
答案 0 :(得分:3)
只需将该类声明为朋友:
template <typename Type>
class SomeClass {
Type p;
public:
template <typename Type2> friend class SomeClass;
SomeClass(Type x) { p = x; }
template <typename Type2>
SomeClass(SomeClass<Type2> k) { p = k.p; }
Type GetP() { return p; }
};
答案 1 :(得分:0)
SomeType<T>
和SomeType<U>
是不同的类型,因此无法访问其他类的私有(也不受保护)成员。
在您的情况下,您可以使用您的getter:
template <typename Type2>
SomeClass(const SomeClass<Type2>& k) { p = k.GetP(); }