C++ 在C++;

C++ 在C++;,c++,C++,我对模板类有这个问题。我想用另一个类作为不同类型的参数创建一个构造函数,但是每次我尝试初始化该类的属性时,我都会得到一个错误,即它是私有的,我无法访问它。 我将感谢任何帮助 下面是简单的代码: template <typename Type> class SomeClass { Type p; public: SomeClass(Type x) { p = x; } template <typename Type2> SomeCla

我对模板类有这个问题。我想用另一个类作为不同类型的参数创建一个构造函数,但是每次我尝试初始化该类的属性时,我都会得到一个错误,即它是私有的,我无法访问它。 我将感谢任何帮助

下面是简单的代码:

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;
}
模板
上课{
p型;
公众:
SomeClass(类型x){p=x;}
模板
SomeClass(SomeClass k){p=k.p;}
键入GetP(){return p;}
};
int main()
{
c类(2.4);
第c1(c)类;

std::cout只需将类声明为朋友:

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; }
};
模板
上课{
p型;
公众:
模板好友类SomeClass;
SomeClass(类型x){p=x;}
模板
SomeClass(SomeClass k){p=k.p;}
键入GetP(){return p;}
};
SomeType
SomeType
是不同的类型,因此无法访问另一个类的私有(或受保护)成员

在您的情况下,您可以使用getter:

template <typename Type2>
SomeClass(const SomeClass<Type2>& k) { p = k.GetP(); }
模板
SomeClass(constsomeclass&k){p=k.GetP();}

请注意
SomeType
SomeType
是两种完全不同的类型。因此,您无法访问私有成员变量,因为这些类型是不相关的。因此,您的问题不是模板问题。我一直都知道这些是不同的类型,但我认为模板中的某些内容是导致问题的原因问题。下次我会记住这一点,谢谢。getter会解决这个问题,但似乎将类声明为好友会解决我的更复杂类型的问题。我感谢您的努力。